たとえば、時刻 (午前 7 時、午前 7 時 30 分など) などのデータの配列があり、いくつかの場所に保存して参照する必要があります。
1) このデータはどこに保存すればよいですか? 私はもともと自分のDBで考えていました(私はmongoidを使用しています)が、それがやり過ぎかどうかはわかりません。
2) それを参照するにはどうすればよいですか? ドロップダウンメニューから言ってみましょう。
たとえば、時刻 (午前 7 時、午前 7 時 30 分など) などのデータの配列があり、いくつかの場所に保存して参照する必要があります。
1) このデータはどこに保存すればよいですか? 私はもともと自分のDBで考えていました(私はmongoidを使用しています)が、それがやり過ぎかどうかはわかりません。
2) それを参照するにはどうすればよいですか? ドロップダウンメニューから言ってみましょう。
このような状況ではConstants
、libにモジュールを作成します。
module Constants
SCHEDULER_STEPS = %w( 7:00am 7:30am )
end
次に、必要な場所からアクセスします。
Constants::SCHEDULER_STEPS
注:libs
構成ファイルの自動ロードパスに必ず追加してください。
そのような種類の要件については、私は好みます
1番目)作成するconfig/app_constants.yml
ここにコード
production:
time_list: "'7:00am','7:30am','7:40am'"
test:
time_list: "'7:00am','7:30am','7:40am'"
development:
time_list: "'7:00am','7:30am','7:40am'"
2番目の下で作成lib/app_constant.rb
module AppConstant
extend self
CONFIG_FILE = File.expand_path('../config/app_constants.yml', __FILE__)
@@app_constants = YAML.load(File.read(CONFIG_FILE))
@@constants = @@app_constants[Rails.env]
def get_time_list
@@constants['time_list'].split(',')
end
end
3番目のようにどこでもそれを呼び出す
AppConstant.get_time_list #will return an array
これを使用すると、1つのクリーンな場所()で変更を加えるだけで、使用app_constants.yml
する場所を問わず、アプリケーション全体に反映されます。AppConstant.get_time_list
最終的に、次のコードを使用して「/config/initializers」に「global_constants.rb」ファイルを作成しました。
module Constants
BUSINESS_HOURS = ["6:00am","6:15am","6:30am","6:45am","7:00am"]
end
次に、特に選択ボックス用にデータを呼び出しましConstants::BUSINESS_HOURS
た。コードは次のとおりです。<%= f.input :hrs_op_sun_open, :collection => Constants::BUSINESS_HOURS %>
ここでの答えの多くは実行可能であるように思われ、私が必要としていたことを行うためのすべての正しい方法であると思います.
この種のデータは、最も密接に関連するモデルに配置することを好みます。たとえば、例の時間がバックアップを実行する時間である場合、それらBackup
をバックアップに関連する残りの動作とともにモデルに入れます。
# app/models/backup.rb
class Backup < ActiveRecord::Base
AVAILABLE_RUN_TIMES = %w{7:00am 7:30am ...}
def run_at=(date)
BackupSchedule.create(self, date)
end
end
# app/views/backups/_form.html.erb
<%= select_tag(:run_at, options_for_select(Backup::AVAILABLE_RUN_TIMES)) %>
私も「定数の大きなバケツ」アプローチを使用しましたが、定数が存在する場所が本当にこれ以上ない場合にのみ使用します。