2

我有一个严重依赖日期的应用程序。根据当前日期设置这些日期需要进行适度昂贵的计算。就每个请求而言,这些日期是常数——一旦创建它们就不会改变——但它们会在一周内发生变化。日期用于控制器和模型。

我的问题是这样的:

  • 如果日期不是每天都在变化,我可以在 config/initializers 中设置它们。但是初始化器仅在服务器重新启动时进行评估
  • 如果我使用 before_filter 在 applicationController 中设置日期,则这些日期对我的模型不可用

有任何想法吗?我看这一切都错了吗?谢谢。

4

2 回答 2

2

一种方法是:创建一个单例类,当被要求提供一个实例时,它会检查日期。在我的头顶上,

class MyDates
  def self.get_instance
    unless @instance && @date == Date.new
      @date = Date.new
      @instance = self.new(@date)
    end
    @instance
  end

  def initialize(date)
    # calculate the expensive stuff
  end
end
于 2010-10-03T17:29:08.540 回答
1

我认为在这里您可以使用 Rails 缓存。查看此处此处以获取更多详细信息和示例。

基本上,您可以写入缓存:

Rails.cache.write('date', Date.today)

并阅读:

Rails.cache.read('date')

您可以在整个 Rails 应用程序(模型、视图、控制器……)中使用它。

您可以将任何对象存储在缓存中。默认缓存使用内存并且可用于单个 Rails 实例,但是您可以使用不同的缓存存储方法。

于 2010-10-03T18:08:47.683 回答