上次访问商店时,我正在制作节目。如果他们在同一天都被访问过,我希望能够一次更新多个商店。
我认为我有大部分代码,但我无法弄清楚如何摆脱质量分配错误
Can't mass-assign protected attributes: date_visited(1i), date_visited(2i), date_visited(3i)
{"utf8"=>"✓",
"_method"=>"put",
"authenticity_token"=>"/yr8kLOyrTRGPfG1f/I5ilY/QB6GUx9IhQj6WiBaibM=",
"store_ids"=>["4",
"5"],
"visit"=>{"date_visited(1i)"=>"2012",
"date_visited(2i)"=>"11",
"date_visited(3i)"=>"14"},
"commit"=>"Save Visit"}
模型
class Visit < ActiveRecord::Base
attr_accessible :date_visited, :spent, :store_id
belongs_to :
end
控制器
def update_multiple
@visits = Store.find(params[:store_ids])
@visits.each do |visit|
visit.update_attributes(params[:visit])
end
flash[:notice] = "Updated products!"
redirect_to stores_path
end
查看
<%= form_for :visit, :url => update_multiple_visits_path, :html => { :method => :put } do |f| %>
<ul>
<% @visits.each do |visit| %>
<%= hidden_field_tag "store_ids[]", visit.id %>
<% end %>
</ul>
<div class="field">
<%= f.label :date_visited %><br />
<%= f.date_select :date_visited %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
<ol id="route">
<% @visits.each do |store| %>
<%= content_tag_for :li, store do %>
<%= "#{store.store} - #{store.address}" %>
<% end %>
<% end %>
</ol>
答案 0 :(得分:0)
最有可能的是,您错过了attr_accessible :your_model_attributes
这种情况,:visits_attributes
在您的activerecord模型定义上。
另外,你的参数应该是这样的
{ visits =>
{ id_1 =>
{ :store_id
:attributes_for_visit_1 }
}
{ id_2 =>
{ :store_id
:attributes_for_visit_2 }
}
} # and so on....
# visits_controller.rb
def update_nultiple_visits
@visits = Visits.find(params[:visits].keys).each{|visit|visit.update_attributes!}
end
答案 1 :(得分:0)
将此添加到您的Store
型号
attr_accessible :visits_attributes
accepts_nested_attributes_for :visits
我建议将控制器更改为:
def update_multiple
@stores = Store.find(params[:store_ids])
@stores.each do |store|
store.update_attributes(params[:visit])
end
flash[:notice] = "Updated products!"
redirect_to stores_path
end
答案 2 :(得分:-1)
Helper date_select生成三个选择标签(年,月和日) 您可以在更新属性之前连接它 例如:
Date.civil(params[:visit][:date_visited(1i)].to_i, params[:visit][:date_visited(2i)].to_i, params[:visit][:date_visited(3i)].to_i)