はじめに
Railsで定数を作るとき、いつもどうしてたっけ?っていう個人まとめをつくってみました。
決定版みたいなものが無い感じというのもあったりするので参照用という感じです。
グローバルな定数定義
以下のような感じの内容で、「config/initializers」に適当なRubyファイルを作成して定義します
1 2 |
|
もしくは、yamlに定数を切り出して、実行タイミング(Rails起動時)にロードという方式でもいいかもしれません。
# yamlに切り出すと管理が大変になるかも・・・という欠点は無きにしもあらずですね。
欠点は以下が考えられます。
- namespaceの概念が無いので少々使いづらい
- 環境ごとに値を変更したい場合、切り替え処理を自前でやる必要がある
特に、環境差分とか無ければこれでいいかもしれませんね。
# 尤も、namespaceを使わなくて済む程度という前提が付きますが・・・
コントローラー内で共通な定数定義
以下のような感じで、app/controllers/application_controller.rb 内で定義します
1 2 3 4 |
|
単にApplicationControllerがすべてのcontrollerのスーパークラスになっているから参照できるというだけの話です。 # あまりここに定義はしたくないですね。
rails_configを使って環境ごとに変更する
rails_configというgemを使う方法ですね。
以下をGemfileに記述し、インストールします。
1
|
|
rails_configを使うように初期設定をします(ただのインストールですが)
1
|
|
ファイルに関しては以下の通り
環境 | ファイルパス |
---|---|
全ての環境で共通 | config/settings.yml |
ローカル環境 | config/settings.local.yml |
開発環境 | config/settings/development.yml |
テスト環境 | config/settings/test.yml |
本番環境 | config/settings/production.yml |
YAMLの記述は以下のような感じで行います
1 2 3 |
|
使用する場合は、以下のようなコードで出来ます。
1 2 3 |
|
他に、同じようなことをする有名なgemに、「settingslogic」があります。
以下の感想でsettingslogicはあまりつかわないです。
- 一つのファイルで全て定義なのでファイルが肥大化しそう
- クラス定義も作る必要があるので若干面倒(シンプルに使えない)