Ich versuche railscast #196 in Rails 4 zu reproduzieren. Ich habe jedoch einige Probleme.Schienen 4: accepts_nested_attributes_for und Massenzuweisung
In meinem Beispiel ich versuche, ein Telefonbuch zu erzeugen - jede Person mehrere Phonenumbers
Dies sind wichtige Teile meiner Controller haben könnte:
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 dies 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, ich habe has_many :phones
und accepts_nested_attributes_for :phones
in meiner Person Modell und belongs_to :person
im Telefonmodell.
Ich habe folgende Fragen:
- Statt 3 Telefonnummer-Felder gibt nur einen in der neuen Form ist
- Wenn ich das Formular bekomme ich einen Fehler:
ActiveModel::ForbiddenAttributesError
in der Linie
@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 mag diese ganze Sache als eine Form Objekt tun, aber ich denke, wenn ich es mit accepts_nested_attributes bekommen nicht einmal, ich habe keine Chance, es als eine Form zu tun Objekt :(
yay! Das hat beide Probleme gelöst - kann nicht sagen, wie froh ich bin! Im Basic Rails Tutorial verwenden sie einen Hash: http://guides.rubyonrails.org/getting_started.html#the-first-form - können Sie den Unterschied ausarbeiten? – speendo
@speendo, Bitte beachten Sie das Update, wenn Sie den Unterschied zwischen der Verwendung des Symbols und der Verwendung des Objekts meinten. – vee
ja, vielen Dank, dass du darauf hingewiesen hast! – speendo