2012-02-21 7 views

答えて

1

これはあなたの質問に対する回答ではありませんが、あなたが代替案を探すことを示唆しています。私は定数を使用するよりも、あなたの料理名でデータベーステーブルを作成するほうがはるかに良いと思います。レールアソシエーションを活用して、読みやすいコードを書くことができます。

定数を使用する際の問題は、多くの状況で、実際には定数ではないことです。日本語を追加したい場合はどうなりますか?タイを追加したいが、6ヶ月後にそれをドロップするとどうなるのだろうか?インド人が広すぎると判断し、 "北インド人"と "南インド人"を欲しいと決めたら、どうなりますか?

データベーステーブルを使用すると、それらの定数に関連付けられているクラスが常に一貫性のある状態になるようにすることができます。あなたがそれらすべてを取得する必要があるとき、彼らはコードの行だけ離れたイテレータに建てられた素敵で

my_cuisines = Cuisine.all 

としています。

0

まず、Marc Talbotが言ったことを考えてみましょう。実際には通常のデータベースモデルが必要ないことを確認してください。定数を使用したい場合は、

これを行うには、疑似モデルを使用することをお勧めします。その後app/models/cuisine.rb

class Cuisine 

    # Should come before the constant declarations 
    def initialize(name) 
    @name = name 
    end 

    Mexican = new('Mexican') 
    Chinese = new('Chinese') 
    Indian = new('Indian') 

    def to_s 
    name 
    end 

    # other related methods 
    # like translations, descriptions, etc. 

end 

他のどこでもアプリ内であなただけ参照できCuisine::MexicanCuisine::Indian

また、あなたがそれを使用しているかに応じて、あなたは料理のリストが必要になる場合があります。

class Cuisine 

    ... 

    def self.all 
    [Mexican, Indian, Chinese, ...] 
    end 
end 

この手法は、コードを整理しておき、別のイニシャライザファイルを書き留めないようにします。あなたが宝石 'settingslogic' を使用することができます

+0

は、あなたが望むかもしれないが、トップにinitializeメソッドを置くために。それ以外の場合、定数宣言は失敗します(初期化子セットがないため、railsは文字列引数を期待していません)。 –

+0

ああ、良いキャッチ。私は例を変更しました。私の脳は、機能/ヴァールがスコープの上部に吊り下げられているJSで考えていました。ありがとう。 – fullsailor

0

モデルsettings.rb:

class Settings < Settingslogic 
    source "#{Rails.root}/config/settings.yml" 
    namespace Rails.env 
end 

はその後、コントローラでの使用:

Settings.cousines 
+0

またはgem 'app_settings' –

+0

設定ファイルenvironment.rbから使いたい – krishnareddy