我正在尝试更新模型中多个记录的一个字段,Lead。每个潜在客户都显示在一个表格行中,并且为多行修改的字段是“选定的”,它是一个布尔值,存储为 tinyint 1 或 0,true 或 false。
引导控制器.rb
def list
@leads = Lead.where({:store_number => session[:store_number]}).order("selected DESC")
@targeted_leads = Lead.where(:store_number => session[:store_number], :selected => true)
end
def update_multiple
@leads = Lead.find(params[:lead_ids])
@leads.update(params[:lead_ids])
redirect_to(:action => 'list')
end
list.html.erb
<%= form_tag update_multiple_leads_path, :method => :put do %>
<table>
<thead>
<tr>
<th>Lead Name</th>
<th>Selected Leads</th>
</tr>
</thead>
<tbody>
<% for lead in @leads %>
<tr>
</td>
<td><%= lead.company_name %></td>
<td>
<%= fields_for("lead_ids[]", lead) do |f| %>
<%= f.check_box("selected") %>
<% end %>
</td>
</tr>
<% end %>
</tbody>
</table>
<%= submit_tag('Save Targeted Leads', :class => "btn") %>
<% end %>
现在,我希望这个表单做的是传递所有潜在客户,如果选中,则将该记录的“选定”字段更新为 1,如果未选中,则将该字段更新为 0。
当它通过时,以下是 update_multiple 操作的结果:
ArgumentError in LeadsController#update_multiple
Unknown key: 6
Rails.root: (my/rails/root)
Application Trace | Framework Trace | Full Trace
app/controllers/leads_controller.rb:73:in `update_multiple'
Request
Parameters:
{"commit"=>"Save Targeted Leads",
"lead_ids"=>{"6"=>{"selected"=>"1"},
"1"=>{"selected"=>"0"},
"3"=>{"selected"=>"0"}},
"authenticity_token"=>"ALYtIkJNsAANsHXaAvgeb84G9Ms7OPSkyFO6jkM19yU=",
"_method"=>"put",
"utf8"=>"\342\234\223"}
仅供参考:(第 73 行在我的控制器中引用了这一行:)@leads = Lead.find(params[:lead_ids])
当我看到这个时,它看起来就像我希望它传递的所有内容一样......领导模型,使用 id 6,设置为 1。现在将 id 设为 1,将 selected 设置为 0。真正让我困惑的是“未知密钥”位。我最初的想法是,它不是在寻找要修改的正确字段……例如,它知道我在寻找“6”,但是“6”呢?“6”不是键。ID 6,还是别的什么?有没有其他人解决了这个问题?预先感谢您的想法。