我对从配置/初始化程序中加载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变为零。
设置这样的常量的最佳方法是什么。它与缓存有关,所以永远不会是零?
答案 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