web-dev-qa-db-ja.com

Ruby on Railsアプリケーションで、定数を定義するのに最適な場所はどこですか?

Ruby on Railsアプリケーションでは、定数を定義するのに最適な場所はどこですか?

アプリケーションのすべてのコントローラーで利用できる必要がある定数データの配列があります。

44
mlambie

Rails> = 3、アプリケーション自体はモジュールです(config/application.rbに含まれています)。それらをアプリケーションモジュールに保存できます

module MyApplication
  SUPER_SECRET_TOKEN = "123456"
end

次に、MyApplication::SUPER_SECRET_TOKENを使用して定数を参照します。


Rails> = 2.1 && <3あなたはそれらを配置する必要があります

  1. 定数がアプリケーションスコープを持つ場合、/config/initializers
  2. 定数が特定のモデル/コントローラー/ヘルパーを参照する場合、クラス/モジュール自体内でスコープを指定できます

Rails 2.1およびinitializersサポートの前は、アプリケーション定数をenvironment.rbに配置するためにプログラマーが使用されていました。

ここにいくつかの例があります

# config/initializers/constants.rb
SUPER_SECRET_TOKEN = "123456"

# helpers/application_helper.rb
module ApplicationHelper
  THUMBNAIL_SIZE= "100x20"

  def thumbnail_tag(source, options = {})
    image_tag(source, options.merge(:size => THUMBNAIL_SIZE)
  end

end
64
Simone Carletti

これらはconfig/environment.rbに配置できます。

Rails::Initializer.run do |config|
    ...
    SITE_NAME = 'example.com'
end

大量のグローバル定数がある場合、これは面倒になる可能性があります。 YAMLファイルから調達するか、データベースに定数を保持することを検討してください。

編集:

wepposの答えがより良い答えです。

定数をconfig/initializers/*。rbのファイルに保存します

10
guns