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?).
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.
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
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
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.