Rails:初始化器中的常量

4

我希望在初始化器中保留常量,并像这样在模型中使用:

模型:

class AssessmentProcedure < ActiveRecord::Base

  def default_values
    self.self_estimation_weight ||= PROCEDURES_CONFIG['self_estimation_weight']
    self.parent_estimation_weight ||= PROCEDURES_CONFIG['parent_estimation_weight']
  end

end

config/initializers/constants.rb

PROCEDURES_CONFIG = YAML.load_file("#{::Rails.root}/config/assessment_procedures.yml")

问题是当我使用它时,会出现异常:
NameError: uninitialized constant AssessmentProcedure::PROCEDURES_CONFIG

我错过了什么?谢谢。

你可以在模型 PROCEDURES_CONFIG = YAML.load_file("#{::Rails.root}/config/assessment_procedures.yml") 中使用它,而不是使用初始化程序。 - Rajarshi Das
@RajarshiDas 我知道,但是在模型中保留常量是一种不好的做法。 - Pavel
1
å°†PROCEDURES_CONFIG['self_estimation_weight']ę›æę¨¢äøŗ::PROCEDURES_CONFIG['self_estimation_weight']怂 - itsnikolay
@PavelBabin 也许重启服务器可以解决这个问题? - itsnikolay
@itsnikolay 我在控制台中尝试了一下,然后重新加载了它。 - Pavel
显示剩余5条评论
1个回答

2

尝试

self.self_estimation_weight ||= ::PROCEDURES_CONFIG['self_estimation_weight']

这将取消限定常量并使用全局命名空间

Rails 4.2 中有一种更加简洁的方式

# config/environments/production.rb
config.x.procedures_config.self_estimation_weight = 4711

关于自定义配置选项,请参见http://edgeguides.rubyonrails.org/4_2_release_notes.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接