我有一组数据,例如时间(早上 7:00、早上 7:30 等),我想在几个地方存储和引用这些数据。
1)我应该在哪里存储这些数据?我最初是在我的数据库中考虑的(我正在使用 mongoid),但我不确定这是否过度杀戮。
2)我将如何去引用它?比方说,从下拉菜单中。
我有一组数据,例如时间(早上 7:00、早上 7:30 等),我想在几个地方存储和引用这些数据。
1)我应该在哪里存储这些数据?我最初是在我的数据库中考虑的(我正在使用 mongoid),但我不确定这是否过度杀戮。
2)我将如何去引用它?比方说,从下拉菜单中。
在这种情况下,我Constants
在 lib 中创建了一个模块:
module Constants
SCHEDULER_STEPS = %w( 7:00am 7:30am )
end
然后我可以在任何需要的地方访问它:
Constants::SCHEDULER_STEPS
注意:请务必libs
在配置文件中添加到您的自动加载路径。
我更喜欢将这类数据放在与其最密切相关的模型上。例如,如果您的示例中的时间是运行备份的时间,请将它们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)) %>
我也使用了“大桶常量”方法,但只有在确实没有更多相关的地方让常量存在时,我才会使用它。
对于这种要求,我更喜欢
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'"
第二次创建下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
第三调用它像任何地方
AppConstant.get_time_list #will return an array
有了这个,您只需在一个干净的地方(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 %>
这里的许多答案似乎都是可行的,我怀疑它们都是做我需要的正确方法。