Ruby on rails 在Rails中,我应该将整个应用程序中使用的计算值存储在哪里?

Ruby on rails 在Rails中,我应该将整个应用程序中使用的计算值存储在哪里?,ruby-on-rails,variables,environment-variables,Ruby On Rails,Variables,Environment Variables,我有以下变量定义: @monday = (Time.now).at_beginning_of_week 我在不同的模型、控制器和视图中使用它 我可以在哪里定义它(以及我应该如何定义它--@@?),这样我就可以定义一次并在Rails应用程序中使用它 它应该在environment.rb中吗?是否应该是@?使用environment.rb定义此值不是您想要的,因为该值将在服务器启动时计算,并在启动后保持不变。如果希望每周刷新该值,这是一个问题 我将使用ApplicationController中的

我有以下变量定义:

@monday = (Time.now).at_beginning_of_week
我在不同的模型、控制器和视图中使用它

我可以在哪里定义它(以及我应该如何定义它--@@?),这样我就可以定义一次并在Rails应用程序中使用它


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

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

我将使用ApplicationController中的类变量(@@)。但这在模型中是不可访问的


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

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

我将使用ApplicationController中的类变量(@@)。但这在模型中是不可访问的


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

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

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
并将其放入
配置/初始值设定项
(可能有更好的放置位置)。然后,您可以从应用程序中的任何位置访问它:

MyDate::get_monday

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

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
并将其放入
配置/初始值设定项
(可能有更好的放置位置)。然后,您可以从应用程序中的任何位置访问它:

MyDate::get_monday

它大约有三个控制器和视图(我想只有一个模型)——但我注意到我在三个不同的鞋带中对它进行了不同的定义,所以我想让它干燥。如果我把它放在/lib文件中,那行吗?该文件必须命名为my_date.rb吗?它大约有三个控制器和视图(我认为只有一个模型)——但我注意到我在三个不同的鞋带中对它进行了不同的定义,所以我想让它干燥。如果我把它放在/lib文件中,那行吗?文件是否必须命名为my_date.rb?