Rieles 4: accept_nested_attributes_for y asignación en masa

Estoy tratando de reproducirmerailscast # 196 en Rails 4. Sin embargo, estoy experimentando algunos problemas.

En mi ejemplo, trato de generar una agenda telefónica: cada persona puede tener múltiples números de teléfono

Estas son partes importantes de mi controlador:

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

y esta es mi nueva vista

<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 %>

no hace falta decir que tengohas_many :phones yaccepts_nested_attributes_for :phones en el modelo de mi persona ybelongs_to :person En el modelo de teléfono.

Tengo los siguientes problemas:

En lugar de 3 campos de número de teléfono, solo hay uno en el nuevo formularioCuando envío el formulario me sale un error:

ActiveModel :: ForbiddenAttributesError

En la linea

@person.phones.build(params[:person][:phones])

Parámetros:

{"utf8"=>"✓",
 "authenticity_token"=>"l229r46mS3PCi2J1VqZ73ocMP+Ogi/yuYGUCMu7gmMw=",
 "person"=>{"name"=>"the_name",
 "phones"=>{"number"=>"12345"}},
 "commit"=>"Save Person"}

En principio, me gustaría hacer todo esto como un objeto de formulario, pero creo que si ni siquiera lo obtengo con accept_nested_attributes, no tengo oportunidad de hacerlo como un objeto de formulario :(

Respuestas a la pregunta(1)

Su respuesta a la pregunta