繁体   English   中英

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

[英]Where should I store calculated values I use throughout my application in Rails?

我有以下变量定义:

@monday = (Time.now).at_beginning_of_week

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

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

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

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

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

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

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

您可以做的是创建一个新模块,在此模块中定义此值,然后在需要该模块的任何控制器或模型中混合该模块。 因此,您将获得MyModule::start_of_week与值。 只要确保在每个请求上都设置了该值即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM