Forum: Rails-ES accepts_nested_attributes_for

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
5094f7a9a2f002aca4ff68532bb39a1d?d=identicon&s=25 DaVinci (Guest)
on 2009-05-21 12:41
(Received via mailing list)
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 :)

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
Adce10d7f1dbabcdab8f525a59cec32f?d=identicon&s=25 Andrés Gutiérrez (andresgutgon)
on 2009-05-24 14:18
(Received via mailing list)
>>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_...

El 21 de mayo de 2009 12:40, DaVinci <davinci@escomposlinux.org>
escribió:
5094f7a9a2f002aca4ff68532bb39a1d?d=identicon&s=25 DaVinci (Guest)
on 2009-05-24 18:06
(Received via mailing list)
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
This topic is locked and can not be replied to.