2011年5月31日火曜日

[Rails3] グローバルな定数を定義する

実行環境:Rails 3.0.4

グローバルな定数を定義する

アプリケーション内で使用するグローバルな定数を定義する方法としてはいくつか流儀があるようです。

① app/controllers/application_controller.rb 内で定義
② config/initializers/constants.rb 内で定義


① app/controllers/application_controller.rb 内で定義
applicationコントローラは通常すべての controller のスーパークラスとなっているので、application コントローラ内で定義された定数は、アプリケーション内のすべてのコントローラ内で参照できます。
app/controllers/application_controller.rb
class ApplicationController < ActionController::Base FAVARITE = 'Nadal' end

② config/initializers/constants.rb 内で定義
config/initializersフォルダ内に配置しておくとアプリケーションの起動の際に実行されるので、定数だけを1つのファイルにまとめて定義しておくのも手です。(contants.rb というファイル名はデフォルトでは存在しないものなので好きな名前でOKです。)
すべてのコントローラやモデルで参照できます。
config/initializers/constants.rb
FAVARITE = 'Nadal'


ちなみに定数名はアルファベット大文字で始まります。ruby の約束事です。


Rails2では、config/environment.rb 内で定義するという方法もありますが、ここで記載していたものは Rails3 では①のapplication_controller.rbに移すことになったみたいです。

個人的には②の方法が分かりやすくて好きですが、実行環境の設定に関する定数は①で、それ以外の定数は②で定義する、というのもいいかも知れません