1

模型

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.

4

1 回答 1

1

它将与:

where(foreign_id: q).all

这是因为没有对语句进行.all延迟评估,因此在您的缓存中存储了代理对象,该对象在真正需要时进行评估。如果添加.all,则将实际记录集存储在缓存中。

于 2013-07-05T09:34:17.807 回答