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:

  1. Anstelle von 3-Telefon-Nummer-Feldern ist es nur eine, in der neuen form
  2. 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 🙁

InformationsquelleAutor speendo | 2013-08-30
Schreibe einen Kommentar