我有以下变量定义:
@monday = (Time.now).at_beginning_of_week
我在不同的模型,控制器和视图中使用它。
我在哪里可以定义它(以及如何定义它 - @@?)所以我可以定义一次并在我的Rails应用程序中使用它?
它应该在environment.rb中吗?应该是@@?
答案 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
的值。只需确保在每个请求中设置此值。