モデル、Lead の複数のレコードの 1 つのフィールドを更新しようとしています。各リードは表の行に表示され、複数の行に対して変更されるフィールドは「選択」されます。これはブール値であり、tinyint 1 または 0、true または false として保存されます。
lead_controller.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 を取得し、selected を 1 に設定します。次に、ID 1 を選択し、選択を 0 に設定します。私を本当に混乱させているのは、その「不明なキー」ビットです。私の最初の考えは、変更する正しいフィールドを探していないということです...つまり、「6」を探していることを知っていますが、「6」はどうですか? 「6」はキーではありません。ID 6 か、それとも何か?他の誰かがこれを解決しましたか?よろしくお願いします。