デフォルトでは、YAML キーは String としてレンダリングされます。
development:
username: development_name
password: secret
によってアクセス可能です
APP_CONFIG = YAML.load_file("#{Rails.root}/config/app_config.yml")[Rails.env]
APP_CONFIG['development']['username']
# => "development_name"
特定のキーをシンボルにしたい場合は、YAML ファイルでプレフィックスとして : を付ける必要があります。
development:
:username: development_name
:password: secret
APP_CONFIG = YAML.load_file("#{Rails.root}/config/app_config.yml")[Rails.env]
APP_CONFIG['development'][:username]
# => "development_name"
APP_CONFIG['development']['username']
# => nil
これは Ruby 固有の動作であるため、通常は行われません。他の言語は先頭の : に満足しないかもしれません。
特にシンボルとしてキーにアクセスしたい場合は、次のいずれかを使用できますsymbolize_keys!
APP_CONFIG = YAML.load_file("#{Rails.root}/config/app_config.yml")[Rails.env].simbolize_keys!
しかし、ほとんどの場合、その努力は報われません。内部的には、ライブラリの 90% が比較中にシンボルを文字列に変換します。特に、ハッシュを無差別アクセスで扱う場合はそうです。したがって、この場合、ストーリーの最後に文字列を保持したい場合があります。
最後のオプションは、HashWithIndifferentAccessを作成することです
APP_CONFIG = HashWithIndifferentAccess.new(YAML.load_file("#{Rails.root}/config/app_config.yml")[Rails.env])
これにより、アクセスできるようになります
APP_CONFIG[:development][:username]
APP_CONFIG['development'][:username]
APP_CONFIG['development']['username']
無関心に。ハッシュキーを内部的に文字列に保存し、リクエストを[]
文字列に変換することで機能するため、常に機能します。params[]
これは、コントローラーの有名なハッシュを含む、いくつかの Rails コンポーネントで使用されるクラスです。