【问题标题】:Memcache basic use in rails 3Rails 3 中的 Memcache 基本使用
【发布时间】:2011-08-04 18:13:45
【问题描述】:

所以我正在尝试学习如何使用内存缓存。我将它安装在我的系统中。我正在运行它。我安装了 dalli gem。

一切似乎都很好。

假设我想缓存我的用户表。

我把它放在我的 User.rb 文件中:

  def self.all_cached
    Rails.cache.fetch('User.all') { all }
  end

然后在我的控制器文件中,我曾经有:

@users = User.where(:group_id => current_user.group_id)

所以现在我想要类似的东西:

@users = User.all_cached.where(:group_id => current_user.group_id)

我在哪里收到一个无方法错误...关于我应该如何完成此任务的任何想法?

【问题讨论】:

  • 找不到哪种方法? all_cached 方法还是实际上是 where 方法?

标签: ruby-on-rails ruby ruby-on-rails-3 memcached


【解决方案1】:

根据您的评论,我认为您收到如下错误:

undefined method `where' for #<Array:0x00000004d92520>

那是因为where 作用于模型,但是当你做User.all 时,它基本上返回一个数组,并且没有为数组定义where 方法。

您可能希望对可枚举(和数组)使用find_all 方法(如此处所示:http://www.ruby-doc.org/core/classes/Enumerable.html#M001484),或者甚至一起尝试不同的方法。那是你的选择。

这是他们提供的示例,让您初步了解它的工作原理:

(1..10).find_all {|i|  i % 3 == 0 }   #=> [3, 6, 9]

【讨论】:

  • 啊,我明白了。我真正的问题是人们如何在 Rails 中使用 Memcache 来做这样的事情?我很难相信如果有人正在缓存一个表,就没有更简单的方法来获取该数据吗?
  • 但是,根据您的建议,这似乎确实有效:@users = all_cached.find_all {|i| i.group_id == current_user.group_id }
  • 我从来没有用它来像这样缓存整个表,所以我不确定其他人会如何推荐使用它。 Rails 已经使用了一定程度的缓存,因此您可以想象为不同类型的用户检索创建 memcached 条目:例如“all_users”、“users_filtered_on_x”等。每次它们第一次运行时,你不应该看得太难成功。
猜你喜欢
  • 1970-01-01
  • 2011-12-26
  • 1970-01-01
  • 2012-06-17
  • 1970-01-01
  • 2011-07-30
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
相关资源
最近更新 更多