Rails 4: Accepts_nested_attributes_for und Mass Assignment
Ich versuche mich zu reproduzierenRailscast # 196 in Rails 4. Es treten jedoch einige Probleme auf.
In meinem Beispiel versuche ich, ein Telefonbuch zu erstellen - jede Person kann mehrere Telefonnummern haben
Dies sind wichtige Teile meines Controllers:
class PeopleController < ApplicationController
def new
@person = Person.new
3.times{ @person.phones.build }
end
def create
@person = Person.create(person_params)
@person.phones.build(params[:person][:phones])
redirect_to people_path
end
private
def person_params
params.require(:person).permit(:id, :name, phones_attributes: [ :id, :number ])
end
end
und das ist meine neue ansicht
<h1>New Person</h1>
<%= form_for :person, url: people_path do |f| %>
<p>
<%= f.label :name %> </ br>
<%= f.text_field :name %>
</p>
<%= f.fields_for :phones do |f_num| %>
<p>
<%= f_num.label :number %> </ br>
<%= f_num.text_field :number %>
</p>
<% end %>
<p>
<%= f.submit %>
</p>
<% end %>
Unnötig zu sagen, dass ich habehas_many :phones
undaccepts_nested_attributes_for :phones
in meinem persönlichen Modell undbelongs_to :person
im Telefonmodell.
Ich habe folgende Probleme:
Anstelle von 3 Telefonnummernfeldern gibt es nur eines in der neuen FormWenn ich das Formular abschicke, erhalte ich eine Fehlermeldung:ActiveModel :: ForbiddenAttributesError
in der Schlange
@person.phones.build(params[:person][:phones])
Parameter:
{"utf8"=>"✓",
"authenticity_token"=>"l229r46mS3PCi2J1VqZ73ocMP+Ogi/yuYGUCMu7gmMw=",
"person"=>{"name"=>"the_name",
"phones"=>{"number"=>"12345"}},
"commit"=>"Save Person"}
Grundsätzlich würde ich das Ganze gerne als Formularobjekt machen, aber ich denke, wenn ich es nicht einmal mit accept_nested_attributes bekomme, habe ich keine Chance, es als Formularobjekt zu machen :(