Sto cercando di riprodurre railscast #196 in Rails 4. Tuttavia, sto riscontrando alcuni problemi.Rails 4: accept_nested_attributes_for e assegnazione di massa
Nel mio esempio ho tenta di generare una Rubrica - ogni persona può avere più PhoneNumbers
Queste sono parti importanti della mia regolatore:
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
e questa è la mia nuova 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 %>
inutile dire che ho has_many :phones
e accepts_nested_attributes_for :phones
nel modello personale e belongs_to :person
nel modello del telefono.
ho i seguenti problemi:
- Invece di 3 phone-number-campi c'è solo uno nella nuova forma
- Quando presento la forma ottengo un errore:
ActiveModel::ForbiddenAttributesError
nella linea
@person.phones.build(params[:person][:phones])
Parametri:
{"utf8"=>"✓",
"authenticity_token"=>"l229r46mS3PCi2J1VqZ73ocMP+Ogi/yuYGUCMu7gmMw=",
"person"=>{"name"=>"the_name",
"phones"=>{"number"=>"12345"}},
"commit"=>"Save Person"}
In linea di massima mi piacerebbe fare tutta questa cosa come un oggetto forma, ma penso che se non ho neanche capito con accepts_nested_attributes, non ho possibilità di farlo come una forma opporsi :(
yay! Questo ha risolto entrambi i problemi - non posso dire quanto sono felice! Nel tutorial sui binari di base usano un hash: http://guides.rubyonrails.org/getting_started.html#the-first-form - puoi elaborare la differenza? – speendo
@speendo, vedere l'aggiornamento, se si intende la differenza tra l'uso di simboli e l'uso di oggetti. – vee
sì, grazie per averlo indicato! – speendo