Asociaciones

Holas!, miren tengo el siguiente dilema, tengo 2 modelos usuario y
tarea, a usuario le corresponden varias tareas (has_many :tareas)
y a tarea -obviamente- le corresponde un usuario (belongs_to :usuario).

por ejemplo quiero crear un usuario y una tarea al mismo tiempo, esto
es en una misma pagina el formulario con los field correspondientes
para el usuario y para la tarea. Como hago para que se guarde que a
esa tarea (que es nueva) le corresponda a ese
usuario (que es nuevo?).

Gracias de ante mano

Alberto L.

On Aug 18, 2007, at 5:34 AM, Alberto L. wrote:

Holas!, miren tengo el siguiente dilema, tengo 2 modelos usuario y
tarea, a usuario le corresponden varias tareas (has_many :tareas)
y a tarea -obviamente- le corresponde un usuario
(belongs_to :usuario).

por ejemplo quiero crear un usuario y una tarea al mismo tiempo,
esto es en una misma pagina el formulario con los field
correspondientes para el usuario y para la tarea. Como hago para
que se guarde que a esa tarea (que es nueva) le corresponda a ese
usuario (que es nuevo?).

La idea seria:

class Usuario
has_many :tareas
validates_associated :tareas
end

class Tarea
belongs_to :usuario
end

En la vista usamos @usuario y @tarea para que sea sencillo usar
helpers para cada uno. A la hora de grabar:

@usuario = Usuario.new(params[:usuario])
@tarea = @usuario.tareas.build(params[:tarea])
if @usuario.save
redirect_to …
end

La llamada @usuario.save valida @tarea debido a validates_associated.
Si todo valida graba en una transaccion y le pone el ID de usuario a
la tarea. Si no entras en el redirect puedes simplemente mostrar de
nuevo el form, @usuario y @tarea tendran sus errores respectivos.

– fxn

Gracias Xavier!, me ha funcionado bien. una pregunta, como lo hago si
en vez de tener has_many :tareas tengo has_one :tarea? deberia
funcionar igual, o he de cambiar algo?.

Gracias de nuevo
El 18-08-2007, a las 4:46, Xavier N. escribió:

que se guarde que a esa tarea (que es nueva) le corresponda a ese
belongs_to :usuario

http://lists.simplelogica.net/mailman/listinfo/ror-es
Alberto L.

On Aug 19, 2007, at 2:58 AM, Alberto L. wrote:

Gracias Xavier!, me ha funcionado bien. una pregunta, como lo hago
si en vez de tener has_many :tareas tengo has_one :tarea? deberia
funcionar igual, o he de cambiar algo?.

Solo cambia un detalle, en lugar de

@usuario.tareas.build(params[:tarea])

hay que usar

@usuario.build_tarea(params[:tarea])

– fxn