找不到没有ID的<model>,具有嵌套属性</model>

时间:2012-03-04 00:57:13

标签: ruby-on-rails-3 nested-attributes nested-form-for

我有一个超级简单的形式,我试图用它来一次更新多个记录。我正在使用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似乎存在且正确,但我无法使保存工作!我确定我在这里遗漏了一些明显的东西。

1 个答案:

答案 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

希望这有效。