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>
4

3 に答える 3

0

ほとんどの場合、アクティブ レコード モデルの定義でattr_accessible :your_model_attributesこのケースが欠落しています。:visits_attributes

また、あなたのパラメータは次のようになります

{ 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
于 2012-11-14T21:19:25.287 に答える
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
于 2012-11-14T22:00:47.417 に答える
-1

ヘルパー date_select は、3 つの選択タグ (年、月、日) を生成します。
属性を更新する前に連結できます。
例えば:

Date.civil(params[:visit][:date_visited(1i)].to_i, params[:visit][:date_visited(2i)].to_i, params[:visit][:date_visited(3i)].to_i)
于 2012-11-14T20:19:24.200 に答える