将DB结果缓存为全局变量

时间:2014-02-20 00:43:15

标签: ruby-on-rails activerecord

您好我目前有一个获取Klass.all.map{|m| m.name}的辅助方法。现在我使用id来从数组中获取名称,如果我添加更多,它将自动更新。

当我在视图的循环中使用这个辅助方法时,我认为每次都会进行多次查询以获得Klass,这意味着需要进行大量的额外工作。

我想知道如何“缓存”这个数组,或者我应该这样做更好。

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您处于同一操作中,则会自动执行SQL缓存。您可以查看here以获取更详细的说明。顺便说一句,使用pluck可能会更有效,就像在Klass.pluck(:name)中一样。这将优化您的SQL查询。

答案 1 :(得分:1)

您的帮助方法应与此类似

def klass_names
  @klass_names ||= Klass.all.map{|m| m.name}
end