No estoy exactamente seguro de cuál es mi problema, por lo que esta cuestión puede requerir alguna aclaración más, pero esto es lo que parece ser más relevante:carriles 3 has_many: por medio del registro guardar error
Tengo un has_many :through
y la modelo de unión tiene algunos campos que no son claves foráneas. Cuando construyo los modelos y trato de guardar obtengo un error de validación en los campos clave no foráneos del modelo de unión.
Mis archivos parecen:
Person.rb
has_many :wedding_assignments, :dependent => :destroy
has_many :weddings, :through=>:wedding_assignments
accepts_nested_attributes_for :weddings
accepts_nested_attributes_for :wedding_assignments
Wedding.rb
has_many :wedding_assignments, :dependent => :destroy
has_many :people, :through=>:wedding_assignments
accepts_nested_attributes_for :people
accepts_nested_attributes_for :wedding_assignments
WeddingAssignment.rb
belongs_to :person
belongs_to :wedding
validates_presence_of :role, :person, :wedding
(papel es una cadena)
people_controller.rb
def new
@person = Person.new
1.times do
wedding = @person.weddings.build
1.times do
assignment = wedding.wedding_assignments.build
assignment.person = @person
assignment.wedding = wedding
end
end
end
def create
@person = Person.new(params[:person])
@person.weddings.each do |wedding|
wedding.wedding_assignments.each do |assignment|
assignment.person = @person #i don't think I should need to set person and wedding manually, but I get a validation error if I don't
assignment.wedding = wedding
end
end
end
los parametros que vuelven parecen:
{"first_name"=>"", "last_name"=>"", "weddings_attributes"=>{"0"=>{"wedding_assignments_attributes"=>{"0"=>{"role"=>"Bride's Maid", "budget"=>""}}, "date"=>"", "ceremony_notes"=>""}}}
Y el error exacto es:
ActiveRecord::RecordInvalid in PeopleController#create
Validation failed: Role can't be blank
que claramente no es correcta, ya que se puede ver en params[]
¿Qué estoy haciendo mal?
Ésta es raíles 3.0.0
Tengo curiosidad por saber cuál es el uso de esos '1.times'? – PeterWong
Hago eso para que sea más fácil si quiero cambiarlo a 2. veces o más después. – SooDesuNe
Tienes razón, hacer eso incluso puede permitir al usuario elegir agregar 10 bodas de una vez. : D – PeterWong