設定ファイルで定義されている私のアプリケーションでは、(Chinese、Indian、US)のような料理を定数として使用します。どのようにして定数として設定し、どのようにコントローラにアクセスできますか?は、中国語、インドのルビー(レール上)の定値を設定します。
答えて
これはあなたの質問に対する回答ではありませんが、あなたが代替案を探すことを示唆しています。私は定数を使用するよりも、あなたの料理名でデータベーステーブルを作成するほうがはるかに良いと思います。レールアソシエーションを活用して、読みやすいコードを書くことができます。
定数を使用する際の問題は、多くの状況で、実際には定数ではないことです。日本語を追加したい場合はどうなりますか?タイを追加したいが、6ヶ月後にそれをドロップするとどうなるのだろうか?インド人が広すぎると判断し、 "北インド人"と "南インド人"を欲しいと決めたら、どうなりますか?
データベーステーブルを使用すると、それらの定数に関連付けられているクラスが常に一貫性のある状態になるようにすることができます。あなたがそれらすべてを取得する必要があるとき、彼らはコードの行だけ離れたイテレータに建てられた素敵で
my_cuisines = Cuisine.all
としています。
まず、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::Mexican
かCuisine::Indian
また、あなたがそれを使用しているかに応じて、あなたは料理のリストが必要になる場合があります。
class Cuisine
...
def self.all
[Mexican, Indian, Chinese, ...]
end
end
この手法は、コードを整理しておき、別のイニシャライザファイルを書き留めないようにします。あなたが宝石 'settingslogic' を使用することができます
モデルsettings.rb:
class Settings < Settingslogic
source "#{Rails.root}/config/settings.yml"
namespace Rails.env
end
はその後、コントローラでの使用:
Settings.cousines
またはgem 'app_settings' –
設定ファイルenvironment.rbから使いたい – krishnareddy
は、あなたが望むかもしれないが、トップにinitializeメソッドを置くために。それ以外の場合、定数宣言は失敗します(初期化子セットがないため、railsは文字列引数を期待していません)。 –
ああ、良いキャッチ。私は例を変更しました。私の脳は、機能/ヴァールがスコープの上部に吊り下げられているJSで考えていました。ありがとう。 – fullsailor