我有一个批量编辑表格。用户选择多个现有记录。然后单击显示新记录表单的按钮(所有值均为空)。用户为每个属性输入一些数据,然后单击“提交”,然后使用指定的值更新所有选定的记录。
提交给服务器的params哈希看起来像这样:
{
'lead_ids' => [2,4]
'lead' => {
'name' => 'donato',
'email' => "",
'phone' => ""
}
}
因此,在此示例中,只应为id为2和4的潜在客户更新name属性。
这就是我提出的:
lead = Lead.new lead_params
leads = Lead.where(id: params[:lead_ids])
changed_attrs = lead_params.select {|param| !param.values.first.blank?}
leads.each do |lead|
lead.update_attributes changed_attrs
end
是否有更多Railsy方法可以做到这一点?
答案 0 :(得分:2)
我会将代码重构为更清洁的东西,比如:
leads = Lead.where(id: params[:lead_ids])
hash = lead_params.reject { |k, v| v.blank? }
leads.update_all(hash)
您搜索潜在客户,删除具有空值的对,然后使用该哈希值更新所有潜在客户。
甚至可以使它成为两个班轮:
hash = lead_params.reject { |k, v| v.blank? }
Lead.where(id: params[:lead_ids]).update_all(hash)