在我的应用程序中,我有很多常量,所以我为这些常量创建了一个名为det_constants.yml的常量文件。
/config/det_constants.yml
DEFAULTS: &DEFAULTS
company_type: { "Private" : 1,
"Public" : 2 }
development:
<<: *DEFAULTS
test:
<<: *DEFAULTS
production:
<<: *DEFAULTS
我在lib文件夹中有一个constants.rb文件,它加载这个常量文件。
/lib/constants.rb
module Constants
# Allows accessing config variables from det_constants.yml like so:
# Constants[:abc] => xyz
def self.[](key)
unless @config
raw_config = File.read(Rails.root.to_s + "/config/det_constants.yml")
@config = YAML.load(raw_config)[Rails.env].symbolize_keys
end
@config[key]
end
def self.[]=(key, value)
@config[key.to_sym] = value
end
end
在我的视图文件中,当我这样做时
<%= Constants[:company_type] %>
它会抛出错误
NameError in Vendors#index
uninitialized constant ActionView::CompiledTemplates::Constants
在第
行<%= Constants[:company_type] %>
但是,如果我在控制台中做同样的事情,它会正常运行,
ruby-1.9.2-head > Constants[:company_type]
=> {"Private"=>1, "Public"=>2}
我不知道问题出在哪里。如果在Rails 3中有一个新的更好的方法,请告诉我。
Ruby version: ruby 1.9.2p110 (2010-12-20 revision 30269) [i686-linux]
Rails version: Rails 3.0.3
答案 0 :(得分:1)
我想你需要:
<% require 'constants' %>
此外,您需要在lib/
更改后重新启动服务器;即使在开发模式下它也不会自动捕获它们。
答案 1 :(得分:0)
其他解决方案如何,我建议您观看名为YAML Configuration File的railscast。还有一些宝石,例如Settingslogic来帮助你。