我有一个超级简单的形式,我试图用它来一次更新多个记录。我正在使用Rails 3.我已经完成了所有的轨道广播等工作,此时我正在拔头发。我正在使用Devise,并有一个联系人控制器。用户has_many:contacts和accepts_nested_attributes_for:contacts。表格如下:
<%= form_for @user, :url => '/updateusercontacts' do |i| %>
<%= i.fields_for :contacts do |f| %>
<%= f.label :first_name %>
<%= f.text_field :firstname %>
<%= f.label :last_name %>
<%= f.text_field :lastname %>
<%= f.label :phone_number %>
<%= f.text_field :phonenumber %>
<%= f.label :user_id %>
<%= f.text_field :id %>
<p>
<% end %>
表单显示正确,但随后提交我收到“无法找到没有ID的联系人”。控制器看起来像:
def updatecontacts
@contacts = Contact.find(params[:id])
@contacts.each do |contact|
contact.update_attributes(params[:id])
end
render '/home'
end
参数似乎是正确的,并且id似乎存在且正确,但我无法使保存工作!我确定我在这里遗漏了一些明显的东西。
答案 0 :(得分:0)
尝试删除fields_for,当您调用find时,请使用此[:user] [:contacts] 你的代码应该是这样的。 视图:
<%= form_for @user, :url => '/updateusercontacts' do |i| %>
<%= i.label :first_name %>
<%= i.text_field :firstname %>
<%= i.label :last_name %>
<%= i.text_field :lastname %>
<%= i.label :phone_number %>
<%= i.text_field :phonenumber %>
<%= i.label :user_id %>
<%= i.text_field :id %>
<p>
<% end %>
控制器
def updatecontacts
@contacts = Contact.find(params[:user][:contacts])
@contacts.each do |contact|
contact.update_attributes(params[:user][:contacts])
end
render '/home'
end
希望这有效。