Rails Action 缓存用户特定记录

2023-12-31

我是一个 Rails 新手,试图为我的应用程序实现缓存。 我安装了 memcached 并在development.rb中对其进行了如下配置:

config.action_controller.perform_caching             = true
config.cache_store = :mem_cache_store

我有一个控制器 ProductsController,在用户登录时显示用户特定的产品。

class ProductsController < ApplicationController
  caches_action :index, :layout => false
  before_filter :require_user

  def index
    @user.products              
  end
end

The route for index action is: /products

问题是当我登录时

1) 用户 A 第一次,rails 访问我的控制器并缓存产品操作。

2) 我注销并以用户 B 身份登录,它仍然以用户 A 身份登录,并显示用户 A 而不是用户 B 的产品。 它甚至没有击中我的控制器。

关键可能是路线,在我的 memcached 控制台中,我看到它是基于相同的密钥进行获取的。

20 get views/localhost:3000/products
20 sending key views/localhost:3000/products

动作缓存不是我应该使用的吗?我将如何缓存和显示用户特定的产品?

感谢您的帮助。


第一个问题是 require_user 的 before_filter 位于操作缓存之后,因此不会运行。要解决这个问题,请使用以下控制器代码:

class ProductsController < ApplicationController
  before_filter :require_user
  caches_action :index, :layout => false

  def index
    @products = @user.products              
  end
end

其次,对于操作缓存,您所做的事情与页面缓存完全相同,但是在运行过滤器之后,因此您的 @user.products 代码将不会运行。有几种方法可以解决这个问题。

首先,如果您愿意,可以根据传递到页面的参数缓存操作。例如,如果您传递 user_id 参数,您可以基于该参数进行缓存,如下所示:

caches_action :index, :layout => false, :cache_path => Proc.new { |c| c.params[:user_id] }

其次,如果您只想缓存查询而不是整个页面,则应该完全删除操作缓存并仅缓存查询,如下所示:

def index
  @products = Rails.cache.fetch("products/#{@user.id}"){ @user.products }
end

这应该可以帮助您为每个用户拥有单独的缓存。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails Action 缓存用户特定记录 的相关文章

  • 如何覆盖 Ruby Ranges 的 .. 和 ... 运算符以接受 Float::INFINITY?

    我想覆盖 and Ruby 中的运算符Range 原因是 我正在处理数据库中的无限日期范围 如果你拉一个infinty从 Postgres 中取出日期时间 你会得到一个Float INFINITY在红宝石中 问题是 我无法使用Float I
  • MONGODB [DEBUG] 游标的cursor.refresh() 7078636577051629992

    更新大型 json 列表时 出现以下错误 2012 04 01T09 34 00 00 00 app run 1 MONGODB DEBUG cursor refresh for cursor 7078636577051629992 201
  • 忽略 git 中的本地配置文件

    Rails 应用程序中有一些本地文件 属于我们存储库的一部分 我希望 git 忽略它们 基本上 我希望 git 忽略我对 config environments 目录和 config application rb 文件中的任何内容所做的所有
  • 多态控制器和调用对象

    我的地址具有多态关系 可以由成员或依赖者拥有 一切看起来都很棒 直到我意识到除非我遗漏了一些东西 否则我不知道创建它的对象是什么类型 有没有办法告诉路由文件包含对象的类型 Models class Member lt ActiveRecor
  • 使用 Fetch 和 FormData API 上传多个文件

    我正在尝试使用本机Fetch https developer mozilla org en US docs Web API Fetch API and FormData https developer mozilla org en US d
  • 预期的 ProductField,出现数组问题

    我有一个 Rails 4 应用程序 它有一个如下所示的 params 块 def store params params require store permit name description user id products attr
  • 为什么“捆绑”会在我的开发机器上安装生产 gem?

    Gemfile 说 gem sqlite3 groups gt development test gem mysql2 group gt production 然而当我打字时bundle install在我的开发机器上安装了所有 gem 我
  • 创建一个简单的 Rails 3 文本助手 Gem [重复]

    这个问题在这里已经有答案了 我一直在开发我的第一个 Rails 3 插件 以打包一个我喜欢在ApplicationHelper我所有的应用程序 你可以看到整个代码在 Github 上 https github com burlesona s
  • Rails 3 + angularjs + 缩小在生产中不起作用:未知提供者:eProvider

    我已遵循我能找到的所有修复缩小的说明 例如 var MyController function renamed scope renamedGreeter MyController inject scope greeter and someM
  • 在 ec2 上托管 Rails

    我想将 Rails 部署到亚马逊 ec2 上 我看过 poolparty 和 ec2onrails 但似乎都不再维护了 人们用什么来做到这一点 都是自制的木偶和卡皮斯特拉诺 还是有一个项目可以让我继续下去 我可以推荐两个项目 如果您有一个
  • Rails 4:资产未在生产中加载

    我正在尝试将我的应用程序投入生产 但图像和 CSS 资源路径不起作用 这是我目前正在做的事情 图像资源位于 app assets images image jpg 样式表位于 app assets stylesheets style css
  • 如何从引擎覆盖 Rails 应用程序路由?

    我有一个 Rails 应用程序 我正在尝试将 Rails 引擎集成到其中 主机应用程序有一些捕获所有路由 magic urls match gt admin rendering show match path edit gt admin r
  • Rails/Nginx 中的超时——最佳实践

    我正在开发一个应该在 Nginx 服务器上运行的 Rails 应用程序 根据输入 应用程序可能需要很长时间来处理请求 或者在出现错误时挂起 因此我想防止进程永远运行 除了确保客户端收到超时信号的 Nginx 配置之外 我想我可能仍然需要确保
  • 浏览器关闭时 Omniauth 会话过期

    在我的 Rails 3 应用程序中 我使用 Omniauth 进行用户身份验证部分 fb twitter 实际上我遵循这个 https github com RailsApps rails3 mongoid omniauth https g
  • Rails:named_scope、lambda 和块

    我认为以下两个是等效的 named scope admin lambda company id conditions gt company id company id named scope admin lambda do company
  • Windows 7 x64 上的 Ruby on Rails SQLite 问题

    当我尝试做的时候db create使用 Windows 7 x64 在具有此数据库配置的 sqlite 数据库上 development adapter sqlite3 database db development sqlite3 tim
  • ruby从1.8.7升级到1.9.2(使用Rails 3.1.1)后本地服务器错误

    我刚刚安装了rvm并使用rvm将ruby从1 8 7升级到1 9 2 我在我的应用程序上运行了捆绑安装 它重新安装了我的 gems 当我在本地运行 Rails 服务器并将浏览器导航到 localhost 3000 时 服务器日志中显示以下错
  • 如何加载页面特定的rails 4 js文件?

    我正在阅读资产管道的 Rails 指南文档 它指出 CoffeeScript 页面特定生成的文件 如果清单上有 require tree 指令 则默认情况下可供用户使用 这对我不起作用我必须包括这个 在特定控制器上 我缺少什么 资产管道会将
  • 来自控制器的 Rails 验证

    有一个联系页面 可以输入姓名 电话 电子邮件和消息 然后发送到管理员的电子邮件 没有理由将消息存储在数据库中 问题 如何 在控制器中使用 Rails 验证 根本不使用模型 或者 在模型中使用验证 但没有任何数据库关系 UPD Model c
  • Ruby/Rails 集合到集合

    我有两个表与一个连接表连接 这只是伪代码 Library Book LibraryBooks 我需要做的是 如果我有一个图书馆的 id 我想获取该图书馆拥有的所有书籍所在的所有图书馆 因此 如果我有图书馆 1 图书馆 1 中有书籍 A 和

随机推荐

  • Android 中 EditText 的电子邮件验证

    我编写了以下登录代码 但是当我在电子邮件 ID 后输入 时 它接受并成功登录 它不接受任何其他符号或字符 只接受 我不希望它用 登录 Override public void onCreate Bundle savedInstanceSta
  • 如果使用 jQuery 选中复选框,如何禁用文本框?

    如果用户取消选中复选框并更改文本框的背景颜色 我想禁用文本框 如果用户选中该复选框 则该文本框应该是可编辑的并更改为白色 这是代码 document ready function ba click function tex css back
  • 如何使用 Bootstrap 突出显示 HTML 表格列

    我正在使用引导程序并创建了一个表 其中我需要将列分组在一起 有我可以使用的引导选项吗 我愿意编写自己的 CSS 来做到这一点 但如果有内置的引导方法来做到这一点 我宁愿不这样做 例如 在下表中我想要Current具有一种颜色背景的列和New
  • 将两个字节字符拆分为两个单字节字符

    我有一个值为 0xB3 的字符 我需要将其分成两个单独的字符 所以 X 0xB 且 Y 0x3 我尝试过以下代码 int main char addr 0xB3 char p addr printf c c n p 0 p 1 This p
  • Linux目录不同组的权限

    我有两个目录 public 和 private 我有三个用户 chris john dan 我有两个组 pub priv 和 god 上帝 组应该具有对 公共 和 私人 的完全访问权限 pub 组应该是唯一拥有 public 权限的组 pr
  • 强调句子或部分的正确 HTML 标签是什么?

    我意识到我正在使用blockquote在我的整个 HTML 中强调学生必须学习的段落 这显然是错误的 因为blockquote旨在指定从其他来源引用的部分 就我而言 数学 段落定义或描述一个单词 并且应该在视觉上脱颖而出 经过一番研究 我发
  • git fsck:duplicateEntries:包含重复的文件条目 - 无法推送到 gitlab

    我们有一个很大的 git 存储库 我想将其推送到一个自托管的 gitlab 实例 问题是 gitlab 远程不允许我推送我的存储库 git push mirror https mygitlab xy myrepo git 这会给我这个错误
  • 如何从 django 模板加载 java 小程序

    当我从静态 applet html 文件调用它时 我的小程序运行文件 如下所示 但是如何将同一行放入 django 模板中呢 我应该把 jar 和 java 文件放在哪里 我还注意到它在查找文件时将 class 附加到 PApplet 并向
  • 错误 - PHP 网页已过期?

    我的 PHP 项目中有六页注册表单 在任何页面之间 如果我按资源管理器栏中的后退按钮 则会收到错误 网页已过期 我在用 POST提交数据 我不明白为什么会出现这种情况 该消息与 IE 处理 POST 数据生成的页面的方式有关 一般来说 为了
  • 使用 pandas 或 numpy 填充缺失的时间序列数据

    我有一个字典列表 如下所示 L timeline 2014 10 total prescriptions 17 timeline 2014 11 total prescriptions 14 timeline 2014 12 total p
  • 使用 javascript 编辑嵌入 SVG 文件的内容

    我有一个包含一些数学方程的 SVG 文件 假设我将此文件包含到我的 html 文档中 现在我想做的是在html文档中使用javascript对svg的内容进行一些简单的修改 一个具体的例子我的 svg 文件包含该方程的格式良好的版本 x 2
  • 如何从命令行重新编译 netbeans 项目?

    我有一个用netbeans开发的java应用程序 我想创建一个批处理文件来重新编译项目并将生成的 jar 文件与一些文档一起打包到 zip 文件中并生成安装程序 安装程序的打包和生成没有问题 但我不知道如何从命令行 批处理文件自动编译 每当
  • 逐字输入字符串

    我刚刚开始学习C 我只是在玩它 遇到了一个问题 涉及逐字输入字符串 每个单词用空格分隔 我的意思是 假设我有 name place animal 作为输入 我想读取第一个单词 对其进行一些操作 然后读取第二个单词 对其进行一些操作 然后读取
  • Ruby on Rails 中 Routes.rb 中的“/#action”路线

    如何创建这种格式的路线 在 Ruby on Rails paths rb 文件中 action id 特别是在动作控制器之前插入 字符 例如 参见http lala com album some album id http lala com
  • 如何拒绝对服务器中的 xml 文件的直接访问

    我有一个 html 文件索引 html 在我的服务器中说 abc com 它访问xyz js like javascript文件依次访问data xml文件 文件索引 html xyz js and data xml位于同一文件夹中 我如何
  • 在 Chrome 扩展程序中显示 Adsense 广告

    我正在尝试通过 Google Chrome 扩展程序获利 该扩展程序有一个大面板 可以向用户显示内容 我想将 Google Adsense 中的小型广告添加到扩展面板中 然而 据我所知 Adsense 帐户要获得批准 必须与包含一些优质内容
  • 使用 Matplotlib 和 Cartopy 绘制基于纬度和经度的地图时,为什么我们使用 crs.PlateCarree() 而不是 crs.Geodetic()?

    我一直在学习如何使用 Cartopy 和 Matplotlib 来绘制地图 但我对这个论点有一个疑问转换 根据 Cartopy 文件 转换指定 数据定义的坐标系 假设我要绘制一个区域的温度 并且该区域已被分成几个网格单元 每个网格单元都有一
  • Android 从 Activity 更改 RecyclerView 适配器上的 TextView textSize

    我正在努力寻找如何改变我的RecyclerView适配器textViews from Activity 在我的活动中我有两个小部件 例如increment text size and decrement text size他们必须更改适配器
  • 如何制作 UIElement 的深层复制?

    所以我有一个为 Silverlight 应用程序提供服务的打印组件 该程序中的其他模块能够向打印组件发出信号并向其传递一个UIElement 然后打印组件会将其绘制到屏幕上 一切都很好 当我尝试操作 UI 元素以便更好地设置其格式以适应用户
  • Rails Action 缓存用户特定记录

    我是一个 Rails 新手 试图为我的应用程序实现缓存 我安装了 memcached 并在development rb中对其进行了如下配置 config action controller perform caching true conf