导轨和where子句缓存(Rails cache with where clause)

2019-10-18 08:00发布

模型

class Line < ActiveRecord::Base
   attr_accessible :num, :foreign_id

   def self.cached_foreign(q)
       Rails.cache.fetch([name,"foreign"+q.to_s]) { where(:foreign_id => q) }
   end

end

对于上面的模型中,当Line.cached_foreign(1)反复运行它始终执行的SQL语句。

这里有什么问题? 理想情况下,它应该返回从缓存中重复调用。

这似乎使用时正常工作find ,但使用时并不where

Answer 1:

它将与合作:

where(foreign_id: q).all

这是因为没有声明.all被评估懒洋洋,所以在缓存你存储代理对象,当它真正需要被评估。 如果添加.all你存储实际的记录集的缓存。



文章来源: Rails cache with where clause