コレクション内のすべてのアイテムを 1 つのビューで個別に編集できるフォームを作成しようとしています。一般的なガイドとしてRailscast #198 ( http://railscasts.com/episodes/198-edit-multiple-individually ) を使用しましたが、コレクション内のすべてのアイテムを一度に編集したい (選択しない) ため、チェックボックスは含めませんでしたどちらを編集するか)。私が現在持っているものでは、フォームは正しく表示されますが、送信時にこのタイプのエラーが発生します:
ArgumentError in ProceduresController#update_procedures
wrong number of arguments (0 for 2).
Parameters:
{"utf8"=>"✓",
"_method"=>"put",
"authenticity_token"=>"i9kB+uGlguerjxl0VHy1dRyMY5HrZQdILVuM79Df4Z4=",
"procedures"=>{"1"=>{"description"=>"Example1"},
"2"=>{"description"=>"Example2"}},
"commit"=>"Submit",
"comp_id"=>"1"}
ここで何が欠けているか教えてください:
私のコントローラーで:
def edit_procedures
@comp = Comp.find(params[:comp_id])
@procedures = @comp.procedures.all
end
def update_procedures
@comp = Comp.find(params[:comp_id])
@procedures = @comp.procedures.update.(params[:procedures].keys,
params[:procedures].values).reject { |p| p.errors.empty? }
end
私のルートでは:
resources :comps do
resources :procedures do
collection do
get 'edit_procedures'
put 'update_procedures'
end
end
end
私からしてみれば:
<%= form_tag update_procedures_comp_procedures_path(@comp), :method => :put do %>
<% for procedure in @procedures %>
<%= fields_for "procedures[]", procedure do |f| %>
<% if params[:field].blank? || params[:field] == "description" %>
<%= f.label :description %>
<%= f.text_field :description %>
<% end %>
<% end %>
<% end %>
<p><%= submit_tag "Submit" %></p>
<% end %>
また、'edit_procedures' メソッドを GET から POST に変更しようとしましたが、次のエラーが発生しました。
助けてくれてありがとう。