質問
私は私がその値は基本的になど、有効であることを確認するために送信されたフォームを、フォームフィールドを生成チェックするためにそれを使用するので、私のRailsアプリでどこかに保存するいくつかのデータを持って、私は1つの場所にデータI理由たいですいくつかの場所で、それを利用してます。
これまで、私は例えば、私のコントローラでinitialize
メソッドを定義し、そのメソッド内でインスタンス変数を初期化しました。 @graph_types = ['bar', 'line']
。それがすべてinitialize
は(それらの値を初期化する)ために使用されていたとインスタンス変数は、私はしたくないこれ、後で変更することができます。
さて、例えば、私は右の私のフィルターの後上部にまで、私のコントローラ内のいずれかの方法の外に定数を定義し、私はそれらを凍結しますGraphTypes = ['bar', 'line'].freeze
ます。
私は、このデータを保存したくなかったなど、設定ファイルのようなデータを保存したくありませんでしたデータベースそれはやり過ぎのように思えるからです。私は私の定数の他に利用できるグラフの種類を組み合わせて任意の狂気LEFT OUTER JOINの型のクエリを実行する必要はありません、Themes = ['Keynote', 'Odeo', '37 Signals', 'Rails Keynote'].freeze
を言います。このデータは、特定のコントローラに関連するので、私はenvironment.rbにデータを保存したくありませんでした。
このすべてを考慮すると、私はこの「Rubyの道」についてつもり?
解決
私はあなたが現在やっていることは問題ありと考えています。あなたは、データが一つだけのコントローラに関係し、それが属するところしたがって、それはだと述べました。それは、複数のコントローラのために必要だった場合、または、彼らは一定の値よりも複雑であれば、他のアプローチでは意味をなさないことがあります。
他のヒント
本当にどこにも属していない定数のために私はStaticDataクラスを持っています。
class StaticData
GRAPH_TYPES = ['bar', 'line']
SOMETHING_ELSE = ['A', 'B']
end
そして、私はそれを取得
StaticData::GRAPH_TYPES
同じ回答には適用され、この答えとして投稿はまだ検索結果に来ます。
コントローラに定数を置く定数がそれに直接関係するように、いくつかの理にかなっています。 Rails.root/config/initializers/constants.rb
:定数は、それ以外の場合は、専用の初期化ファイルに配置する必要があります。
application.rbに記載されているコメントを1として:
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded
<のhref = "https://github.com/rails/rails/blob/master/railties/lib/rails/generators/rails/app/templates/config/application.rb" のrel = "nofollowをnoreferrer" >これはまだRailsの3 の
のように有効です。はい、何をやっていることは結構です。これは、しかし、あなたの定数GRAPH_TYPES
を呼び出すためのRubyより慣用的です。
ちなみに、私はあなたのコントローラでinitialize
を定義避けるだろう。それがトラブルにつながる可能性があるように思える。
私は何IDBDとparadisepeteでいくつかを同意するだろう。モデルに定数を使用すると、コントローラはスキニーとモデルの脂肪であるので、行くには最高の方法だろう。 Railsはヒントを表示する見ます
たとえば、あなたは、メトリックモデルにリンクされているメトリックのコントローラを持っていた場合。メトリックモデルでは
クラスメトリック 次にビューであなたのような何かを行うことができます。 f.select:graph_type、メトリック:: GRAPHTYPES
モデルでそれを格納するための良いバリアントになります。それは単純なクラスやインスタンス変数/メソッドできるので、あなたは、DBに保存する必要はありません。
同じ考え方は、検証のためのものです。あなたは、リソース/モデルインスタンスを検証している場合、モデルクラスの内部検証パラメータを格納するための合理的な選択となります。
とにかく、それはあなたが言及した変異型のいずれかの後、「厚いモデルと薄いコントローラのパターンに非常に近くなります。