我有一个每天更新一次的数据库。而不是每次用户发出请求时都在我的控制器中查询它,例如:
@rainy = Place.where("forecast = 'rain'")
我可以在数据库更新后每天运行一次该查询,并在我的控制器可以访问的变量中使值可用吗?
答案 0 :(得分:3)
你可以,但这不是一个很好的解决方案。 Rails已经有了一种方法来保持跨请求的昂贵计算结果:缓存。
使用
@rainy = Rails.cache.fetch(:rainy, expires_in: 1.day) do
Place.where(forecast: 'rain')
end
如果您需要值在每天的特定时间到期,您可以定义一个计算值的rake任务,然后使缓存过期:
# lib/tasks/rainy.rake
task :compute_rainy
# ... whatever comutation produces your database value ...
# Then, expire the cache for :rainy so that the next
# request loads (and caches) the new value
Rails.cache.delete(:rainy)
end