2012-11-14 29 views
0

我正在上次訪問商店時查看節目。如果他們在同一天都被訪問過,我希望能夠一次更新多個商店。更新多個記錄,集結分配錯誤

我想我的大部分代碼,但我無法弄清楚如何擺脫質量分配錯誤

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> 
+1

什麼訪問屬於? – Thanh

+0

參觀屬於商店。每家商店都可以進行多次訪問。我只是試圖追蹤上次有人去每家商店的時間 – user1516050

回答

-1

助手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) 
+0

不,你不需要連接這些參數,Rails應該自動地做這件事。這不是問題。 – Ashitaka

0

最有可能的,你缺少的attr_accessible :your_model_attributes是這種情況下,:visits_attributes您的ActiveRecord模型定義。

此外,您的PARAMS應該像

{ 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 
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 
+0

即使我只嘗試更新一條記錄,我仍然遇到了質量分配錯誤 – user1516050

+0

請在表單中解釋您在做什麼:'<%= hidden_​​field_tag「store_ids []」,visit.id%>'。你爲什麼要將每次訪問的'id'放入一個名爲store_ids的數組中? – Ashitaka