1

一度に複数のレコードを更新するために使用しようとしている非常に単純なフォームがあります。私は Rails 3 を使用しています。すべての Railscast などを経験しており、この時点で髪を引っ張っています。私はDeviseを使用しており、連絡先コントローラーを持っています。ユーザーには多くの連絡先があり、連絡先の入れ子になった属性を受け入れます。フォームは次のようになります。

<%= 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 は存在し、正しいようですが、保存が機能しません! ここで明らかな何かが欠けていると確信しています。

4

1 に答える 1

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

これがうまくいくことを願っています。

于 2012-07-25T10:54:44.270 に答える