我应该在哪里存储我在Rails应用程序中使用的计算值?

时间:2010-10-07 00:49:17

标签: ruby-on-rails variables environment-variables

我有以下变量定义:

@monday = (Time.now).at_beginning_of_week

我在不同的模型,控制器和视图中使用它。

我在哪里可以定义它(以及如何定义它 - @@?)所以我可以定义一次并在我的Rails应用程序中使用它?

它应该在environment.rb中吗?应该是@@?

2 个答案:

答案 0 :(得分:1)

我会将它添加到应用程序控制器:

before_filter :load_date

def load_date
  @monday =  (Time.now).at_beginning_of_week
end

因此,您可以在所有控制器和视图中访问它。如果你想在你的模型中使用它,那么你可能需要它作为一些参数,例如范围。然后你的控制器应该把这个变量传递给模型:

@models = MyModel.before_date(@monday)

我认为你不需要为整个应用程序只有一个这个变量的实例。初始化非常简单。初始化它并且不使用它时也不好。对我来说,很难想象你在所有的控制器和动作中都需要它。

另一种方法是你可以定义类:

class MyDate
  def self.get_monday
    Time.now.at_beginning_of_week
  end
end

并将其放入config/initializers(可能有更好的地方放置它)。然后,您可以从应用程序的任何位置访问它:

MyDate::get_monday

答案 1 :(得分:0)

使用environment.rb定义此值不是您想要的,因为该值将在服务器启动时计算,并在此之后保持不变。如果您希望每周刷新一次值,这就是一个问题。

我会使用ApplicationController中的类变量(@@)。但这在模型中无法访问。

您可以做的是创建一个新模块,在此模块中定义此值,并在需要它的任何控制器或模型中混合此模块。所以你会得到MyModule::start_of_week的值。只需确保在每个请求中设置此值。