В моем приложении много констант, поэтому я создал файл констант с именем det_constants.yml для этих констант.
/config/det_constants.yml
DEFAULTS: &DEFAULTS
company_type: { "Private" : 1,
"Public" : 2 }
development:
<<: *DEFAULTS
test:
<<: *DEFAULTS
production:
<<: *DEFAULTS
У меня есть файл constants.rb в папке lib, который загружает эту константуфайл.
/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