Rails每天为变量赋值一次

时间:2015-04-08 16:47:20

标签: ruby-on-rails

我有一个每天更新一次的数据库。而不是每次用户发出请求时都在我的控制器中查询它,例如:

@rainy = Place.where("forecast = 'rain'")

我可以在数据库更新后每天运行一次该查询,并在我的控制器可以访问的变量中使值可用吗?

1 个答案:

答案 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