私のアプリでは多くの定数があるので、これらの定数のdet_constants.ymlという名前の定数ファイルを作成しました。定数の問題
/config/det_constants.yml
DEFAULTS: &DEFAULTS
company_type: { "Private" : 1,
"Public" : 2 }
development:
<<: *DEFAULTS
test:
<<: *DEFAULTS
production:
<<: *DEFAULTS
この定数ファイルをロードするlibフォルダにconstants.rbファイルがあります。私はそれは、
<%= Constants[:company_type] %>
しかし行でエラー
NameError in Vendors#index
uninitialized constant ActionView::CompiledTemplates::Constants
をスロー
<%= Constants[:company_type] %>
行う私のビューファイルで
/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
、私は同じことを行う場合コンソールでは正常に動作します。
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
ありがとうございました。出来た。 –
これを行うにはこれが最善の方法かどうかを知りたかっただけです。これを行うより良い方法はありますか? –
まあ、それは明らかな方法で*悪い*ではありません。私はあなたがルビーのシンボルが好きだと分かります。それらがそのままyaml、**:thing:123 **にそのまま現れることに注意してください。シンボルは、実装している 'enum'デザインパターンの必要性を制限するかもしれないことにも注意してください。 'CONSTANTS :: Const1'の明白な代替案を考えてみましょう。私は定数のオーバーロードされた配列演算子が大好きですが、私の仕事でSWアーキテクトに私の使用を正当化したいとは思っていません。私は自分自身が大好きです:今、私は新しい解決策を持っています。 :-) – DigitalRoss