Rails在服务器启动时初始化变量

时间:2014-03-18 09:05:57

标签: ruby-on-rails ruby-on-rails-3 initialization

我想在rails中初始化变量并在控制器的操作中使用它,但是当服务器启动时,变量应该具有固定值。我已经尝试在控制器的操作中定义它,并且它为每个请求获得相同的初始化值。例如,我想初始化date.now并在15天后也有相同的日期。

更新 我正在实施即将到来的页面,其中计时器将在15天后显示。如果我在控制器内的一个动作中实现它,它会在每次调用动作时显示新的日期。

请帮助

3 个答案:

答案 0 :(得分:2)

如果要在rails中创建CONSTANT,则只需将其放入initializer文件即可。例如,在constants.rb

中创建文件名initializer
#config/initializers/constants.rb 
TEST_VALUE = 10

要从您的控制器访问此CONSTANT,只需致电TEST_VALUE。例如,

#controllers_path/some_controller.rb
.....
def some_def
    @value = TEST_VALUE # this will be enough to fetch the constants.
end

但是,请确保在更改intializer后重新启动服务器。

答案 1 :(得分:1)

您正在寻找创建constant,这基本上是一个不会改变其价值的变量

您通常会使用initializers设置这些:

#config/initializers/your_initializer.rb
YOUR_CONSTANT = your_date

为了维持一个持久的日期,您必须提供更多关于您使用它的内容。每次加载Rails时都很难创建(如何知道要使用哪个Time.now),所以给我们提供更多信息将是一个很好的帮助

答案 2 :(得分:0)

您也可以使用相反的方法。假设您应该知道新功能的日期(例如2014-04-04 18:00),您可以找到目标日期之前的秒数:

@seconds_left = Time.parse('2014-04-04 18:00').to_i - Time.now.to_i

然后将其传递给客户端并实现计时器。因此,您只需要存储目标日期的字符串表示。

这种方法的明显缺点是,每次要引入新功能时都应调整目标时间。