Accepts_nested_attributes_for


#1

Hola a todos.

Estoy teniendo problemas con ‘accepts_nested_attributes_for’ y me
sorprende porque, salvo error por mi parte, me da la impresión de que el
invento no funciona en absoluto a la hora de actualizar datos.

Quiero exponeros el caso para que me confirméis una de dos
posibilidades:

  • Que os sucede lo mismo
  • Que soy un torpe de mucho cuidado :slight_smile:

Partimos de un modelo extremadamente sencillo:

#------- Modelo------------------
class Person < ActiveRecord::Base
has_many :directions

accepts_nested_attributes_for :directions, :allow_destroy => true
end

class Direction < ActiveRecord::Base
belongs_to :person
end
#--------------------------------

Y procedo con el siguiente código:

Person.create({:name => “Ambrosius”, :age => 12, :directions_attributes
=> {“new_1” => {:data => “En mi pueblo”}, “new_2” => {:data => “En el
tuyo”}}})

¡Albricias! Todo sucede como debe suceder y se crean un par de
direcciones asociadas a la persona “Ambrosius”, con id respectivas 1 y
2.

Entonces vamos un poco más allá y procuro actualizar una de las
direcciones.

ambrosius = Person.find(1)
ambrosius.attributes = {:directions_attributes => {“1” => {:data => “En
mi bonito pueblo”}}}

Pero, oh, vil destino, esta vez, pese a respetar la sintaxis que viene
en la documentación, ActiveRecord me crea otra dirección nueva que
asocia a “ambrosius”, pasando a tener 3 direcciones diferentes.

Me siento muy confuso ante este hecho. De ser un error, no se trata de
un pequeño bug, sino simplemente de que la funcionalidad está
completamente rota.

¿Qué hago mal? ¿Habéis tenido alguno éxito?

Muchas gracias por vuestros consejos y opiniones. Un saludo.

            David

#2

ambrosius.attributes = {:directions_attributes => {“1” => {:data => “En mi
bonito pueblo”}}}

No sera…
ambrosius.UPDATE_ATTRIBUTES = {:directions_attributes => {“1” => {:data
=>
“En mi bonito pueblo”}}}

para que te actualice y no (attributes) para que te cree un nuevo
registro???

No lo sé, no sé muco, pero a primera vista es la sensación que me ha
dado
[1]

[1] http://apidock.com/rails/ActiveRecord/Base/update_attributes

El 21 de mayo de 2009 12:40, DaVinci removed_email_address@domain.invalid
escribió:


#3

El domingo 24 de mayo, Andrés gutiérrez
escribió:> > ambrosius.attributes = {:directions_attributes => {“1” => {:data => "En mi

bonito pueblo"}}}

No sera…
ambrosius.UPDATE_ATTRIBUTES = {:directions_attributes => {“1” => {:data =>
“En mi bonito pueblo”}}}

para que te actualice y no (attributes) para que te cree un nuevo
registro???

Gracias por la idea. Desde que escribí a la lista he hecho muchas nuevas
pruebas y, en efecto, he pasado a intentarlo con update_attributes. Sigo
teniendo algunos problemas, pero tras hablar con el creador del parche y
mirar la documentación del código fuente, he hallado formas de resolver
casi todas mis necesidades, salvando el poder asignar, en asociaciones
N<->N, un registro ya existente a otro que se vaya a crear.

Pero bueno, parece que el autor no ha tenido la necesidad de algo así
todavía y sería un proyecto para el futuro.

Gracias por la
contestación.
Un saludo.

                David