Railsで扱う定数はどこで定義すべきか?

Railsでアプリを書いているとよくあることですが、上限値とかデフォルト値などのマジックナンバーがソースに入ってきます。そんな定数をコードの中へ埋め込むのは気持ち悪いので、どこかグローバルに参照できるところへ出しておきたいところ。

どこに置くか

アプリ全体で共有する定数は「config/environment.rb」に置けばいいようです。開発、テスト、本番ごとに切り替える必要がある定数は、「config/environments/development.rb」などに置いておくようです。

environment.rbに定数を書いたときの注意

これで小一時間はまりました。「environment.rb」はWEBサーバ(WEBrickMongrelなど)起動時に読み込まれるため、WEBサーバを立ち上げたまま変更しても反映しません。
リスタートが必要です!

その他の方法

  • YMLファイルに設定を書いて、こんな感じでアクセスする。(検証はしてません)
myconfig = YAML.load(File.open("#{RAILS_ROOT}/config/myconfig.yml"))
  • Rubyファイルに設定を書いて、requireする。
  • データベースに設定用のテーブルを作る。

参考

  1. こちら(→http://techno.hippy.jp/rorwiki/?HowtoAddYourOwnConfigInfo)で、リスタートの件を見つけなかったら、いつまでもああでもないこうでもないとやってました。感謝です。