Rails 4: accepts_nested_attributes_for und Masse Zuordnung
Ich versuche zu reproduzieren railscast #196 in Rails 4. Aber ich bin erleben einige Probleme.
In meinem Beispiel versuche ich zu generieren Sie einen Telefonbuch - jede Person könnte mehrere PhoneNumbers
Diese sind wichtige Teile von meinem controller:
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 Sicht
<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 der meine person-Modell und belongs_to :person
im Handy-Modell.
Habe ich die folgenden Probleme:
- Anstelle von 3-Telefon-Nummer-Feldern ist es nur eine, in der neuen form
- Wenn ich das Formular abschicken bekomme ich eine Fehlermeldung:
ActiveModel::ForbiddenAttributesError
in der Zeile
@person.phones.build(params[:person][:phones])
Parameter:
{"utf8"=>"✓",
"authenticity_token"=>"l229r46mS3PCi2J1VqZ73ocMP+Ogi/yuYGUCMu7gmMw=",
"person"=>{"name"=>"the_name",
"phones"=>{"number"=>"12345"}},
"commit"=>"Save Person"}
Im Prinzip würde ich gerne die ganze Sache als ein form-Objekt, aber ich denke, wenn ich nicht einmal bekommen es mit accepts_nested_attributes, ich habe keine chance, es zu tun als ein Formular-Objekt 🙁
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um drei Handys in der Ansicht ändern
form_for :person
zuform_for @person
(Sie das Objekt nutzen möchten haben Sie hier gebaut) wie folgt:Diese beheben soll
ForbiddenAttributes
Fehler als gut.Und Ihre
create
Aktion könnte sein:Update:
<%= form_for :person do |f| %>
erstellt ein generisches Formular für diePerson
Modell und ist sich nicht bewusst von den zusätzlichen details, die Sie anwenden, um ein bestimmtes Objekt (in diesem Fall@person
in Ihremnew
Aktion). Angehängt dreiphones
zu den@person
Objekt, und@person
ist nicht das gleiche wie:person
was ist der Grund, warum Sie nicht sehen, drei Handy-Felder in Ihrer Ansicht. Bitte Referenz: http://apidock.com/rails/ActionView/Helpers/FormHelper/form_for für weitere details.code
def new @person = Person.neue ph-Wert = Person.Telefon.build ph-Wert[:phone_type_id] = 1 ph2 = Person.Telefon.bauen ph2[:phone_type_id] = 2 endcode
Wie würde die Sicht wissen die Telefon-Typ-id und senden Sie es zurück, ohne zu speicherncode
@personcode
am Ende der neuen Methode?person
kann nicht erstellt werden, nach gleichen Hilfslinien @speendo gesagt, wir tunrender 'new'
und Felder vonphones
(oder in meinem Fallemails
) sind verschwunden.render 'new'
.