新手问题 [已解决] Rails 缓存随机数据的问题

karrra · 2015年10月30日 · 最后由 karrra 回复于 2015年10月30日 · 2163 次阅读

不知道是不是关键字没找到,google 了好久都没找到相似的

现在有个需求是随机获取一个 model 的 20 条数据

Product.order('RAND()').limit(20)

然后因为希望一天之内获取的数据是不变的,我就想着加个缓存

Rails.cache.fetch("rand_products", expires_in: 1.day) do
  Product.order('RAND()').limit(20)
end

可是每次读缓存到时候得到的数据都是不一样的,求各位指点一下

改成这样就可以了

Rails.cache.fetch("rand_products", expires_in: 1.day) do
  Product.order('RAND()').limit(20).to_a
end

因为你原先缓存的 Product.order('RAND()').limit(20) 是一个 ActiveRecord::Relation 对象,直到使用数据的时候才进行实际查询, 使用 to_a 方法之后,会真正查询数据库,返回数据对象。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号