Ruby on Rails,从YAML加载常量?

时间:2016-01-02 23:40:18

标签: ruby-on-rails ruby-on-rails-4

我对从配置/初始化程序中加载YAML常量的意见/最佳实践感兴趣。目前,这些常量被加载到一个类变量中,服务类从self继承,以便可以像这样访问它们。

    ClassName.MY_CONSTANT 

    class ClassName
      class << self
        attr_accessor :MY_CONSTANT
      end
    end

初始化看起来像这样。

    YADA YADA YAML LOADING
    ClassName.MY_CONSTANT = yaml_config[:my_constant] || 1800

我的问题(我的一个问题)是,这使得铁轨相当脆弱。在开发过程中,如果我触摸控制器中的任何内容,则重新加载库,因此该CONSTANT变为零。

设置这样的常量的最佳方法是什么。它与缓存有关,所以永远不会是零?

1 个答案:

答案 0 :(得分:0)

您似乎在描述类级访问器,而不是常量。我假设您希望在启动/初始化时设置MY_CONSTANT一次,并且该值实际上是一个常量。

一种方法是使用全局常量,然后将类常量设置为该全局常量的值,例如:

# config/initializers/load_yaml_constant.rb

load_yaml_sometime_during_initialization
::CLASSNAME_MY_CONSTANT = yaml_config[:my_constant] || 1800

# my_class.rb
class MyClass
  MY_CONSTANT = ::CLASSNAME_MY_CONSTANT
end