2012-11-14 11 views
9

静的データセット(非動的)を処理する最良の方法は何ですか?Rails静的データセット

たとえば、10種類のインスタンスがあり、それぞれが一意ですが、アプリケーションの存続期間を通じて変更されることのないモデルがあるとします。アクティブレコードモデルを作成してこのデータをデータベースに格納するのは難しいようですが、ジェネリッククラスを作成してこのデータをコードに格納するのは醜いようです。

ベストプラクティスとして受け入れられるのは?


例:

あなたはレートユーザーを持っています。ユーザーは1〜10のレベルを持つことができ、レベルが変わるとレートが変化します。レートには他の情報が含まれている可能性があります。そのため、ユーザーに属性として格納するだけでは、それは価値があります。それは速度にそれを結びつけることや、このようなユーザーの方法として、それを作成するために理にかなって:

def rate 
    case self.level 
    when 1: 
    { value: "foo", something: "bar", else: "baz" } 
    when 2: 
    # etc 
    end 
end 

ソリューションのどちらが理想的ですが、何かがある場合、私はわからないようですそれ以外の場合は起こりうる理想。

私は、この例では定数を使用

答えて

1

私はこの情報をYAMLファイルに保存します。あなたはRailsConfig gemを使用して

level: 
    1: 
    some: value 
    another: value 
    2: 
    some: second value 
    another: second value 

のようなYAMLファイルを作成し、私はYAMLのキーとして数字で完全にはよく分からない(

rate = 2 
val = Settings.level[rate.to_s].some 

でそれにアクセスすることができ、多分あなたはそれらをエスケープする必要があり)

0

:定数は宣言の後に変更されませんが、宣言は動的であることができます:静的な値の定数を使用しているとき、彼らはメモ化する必要があるため

OS = 
    case RUBY_PLATFORM 
    when /linux/ then :linux 
    when /osx/  then :osx 
    when /windows/ then :windows 
    else    :unknown 

パフォーマンス(、良いはずですそして静的性はその目的でなければならないので、おそらくRubyの実装はそれを信じていると思います。JRubyと定数の実装について何かを読んで、見つけたら投稿します。EDIT見つけました:http://blog.headius.com/2012/09/avoiding-hash-lookups-in-ruby.html)。

関連する問題