我有一个使用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 %>
最佳答案
您需要根据打开的模型来构建/创建联系人,而不是尝试手动分配contacts_attributes。您的控制器代码应类似于:
@opening.update_attributes(params[:opening])
查看Rails guide for more info on using nested attributes