我有一個「選項」列表。我需要評估每個選項並將其設置爲真或假。將字符串轉換爲符號並在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