我有一个“选项”列表。我需要评估每个选项并将其设置为真或假。将字符串转换为符号并在if语句中使用
于是我开始与
if params[:account][:use_dbs].present?
if params[:account][:use_dbs] == '1'
@account.settings.use_dbs = true
else
@account.settings.use_dbs = false
end
end
if params[:account][:use_time_logs].present?
if params[:account][:use_time_logs] == '1'
@account.settings.use_time_logs = true
else
@account.settings.use_time_logs = false
end
end
这实际上工作得很好。不过,我最终会选择20个左右的选项,我不想重复20次。所以然后我想到做这样的事情...
# handle optional screen settings
options = ['use_dbs', 'use_time_logs']
options.each do |option|
if params[:account][(option.to_sym)] == '1'
@account.settings.option.to_sym = true
else
@account.settings.option.to_sym = false
end
end
这显然会很多整洁,但我不能让我的头围绕所需的语法。有人可以帮忙吗?
什么是@ account.settings?即什么类型的对象? –
如果'@ account'是一个活动的记录对象,'use_dbs'和'use_time_logs'是位列,那么您可以直接指定它们,而rails将处理类型转换:'@ account.assign_attributes(params [:account])' – BroiSatse