5

has_and_belongs_to_many から has_and_belongs_to_many へのセットアップを使用して、(Ryan B の nested_form gem を使用して) ネストされたフォームを作成しました。

Opening has_and_belongs_to_many :contacts

Contact has_and_belongs_to_many :openings

新しい連絡先を開口部に追加しようとすると、この場合は次のようになります。

Can't mass-assign protected attributes: new_1346666966632

為に

"opening"=>{"contacts_attributes"=>{"new_1346666966632"=>{"contacts"=>{"name"=>"Test Contact",

対応する「accepts_nested_attributes_for」と「attr_accessible」を追加し、連絡先、つまり @opening.contacts.build と @opening.contacts.build(params[:opening][:contact_attributes]) をコントローラーに作成しています。

どこが間違っていますか?ここで has_many スルー関係を使用する方がよいでしょうか?

編集:

意見:

<%= simple_nested_form_for @opening, :wrapper => :plain do |f| %>
  <%= f.link_to_add "Add a contact", :contacts %>
  <%= f.button :submit %>
<% end %>

パーシャルを使用して、ネストされた連絡先のフィールドを生成します。

<%= f.fields_for :contacts, @opening.contacts.build do |contact_form| %>
  <%= contact_form.input :name, :label => false, :input_html => { :class => 'span6' } %>
  <%= contact_form.input :company, :label => false, :input_html => { :class => 'span6' } %>
  <%= contact_form.input :telephone, :label => false, :input_html => { :class => 'span6' } %>
  <%= contact_form.input :email_address, :label => false, :input_html => { :class => 'spa12' } %>
<% end %>
4

1 に答える 1

2

contact_attributes を手動で割り当てようとするのではなく、開始モデルから連絡先を構築/作成する必要があります。コントローラーのコードは次のようにする必要があります。

@opening.update_attributes(params[:opening])

ネストされた属性の使用に関する詳細については、Rails ガイドを確認してください。

于 2012-09-03T13:17:43.647 に答える