我試圖更新模型中的多個記錄的領域,領導。每個導聯都顯示在一個錶行中,並且爲多行修改的字段是「selected」,這是一個布爾值,存儲爲tinyint 1或0,true或false。Rails - 如何通過列表操作中的表單更新多個記錄?
leads_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"}
FYI:(73個引用在此行中我的控制器:@leads = Lead.find(params[:lead_ids])
) 當我看這個,它看起來像是一起路過的一切,就像我'd想要它...主角模型,採取id 6,設置選擇1.現在採取ID 1,選擇設置爲0.真正令我困惑的是,「未知鍵」位。 我最初的想法是,它不是在尋找正確的領域來修改...,因爲它知道我在尋找「6」,但是「6」怎麼樣? 「6」不是關鍵。 Id 6,還是別的? 有沒有人解決了這個問題?預先感謝您的想法。
我敢打賭,你點上... http://stackoverflow.com/questions/8877737/recursively-convert-all-numeric-strings-to-integers-in-a-ruby-hash 這個解決方案似乎解決了我的問題,但是我沒有看到在Ruby文檔中的任何地方進行修復,並且在定義fixnumify時,他從內部調用該方法...? 任何想法如何製作這個?我正在尋找將散列中的所有數字字符串轉換爲整數。 – DerektheDev 2012-04-11 18:46:06
請參閱上面的...新到Stack Overflow,沒有意識到它沒有通知你。 – DerektheDev 2012-04-11 22:15:13