Tengo una serie de modelos que están relacionados, están representados
en
tablas distintas. Hasta aquà todo correcto.
Sin embargo, cuando creo una instancia de cierto modelo no me vale tener
en
la vista un formulario para rellenar los datos de éste, sino que también
necesitarÃa campos para crear instancias en los modelos relacionados. No
se
si me he explicado bien (sino decirme y lo intento de alguna otra
manera).
Una solución que se me ocurre es modificar la vista de un modelo para
que
tenga campos en el formulario para los datos de los otros modelos, pero
no
me parece lo más correcto. ¿Que os parece?
Otra solución podrÃa ser ir redirigiendo al usuario a través de
distintos
formularios, es decir, por todas las vistas de todos los modelos que
intervienen. Pero esto me hace pensar… ¿dónde guardo la información de
cada modelo? ¿En la acción CREATE del último controlador asociado a la
última vista? No me parece buena idea. Pues… ¿Lo voy guardando en
cada
uno y redirijo al siguiente? Pero entonces… ¿si el usuario se aburre
y no
llega a la última vista? Porque hacer una transacción a través de tantas
vistas… ufff que dilema.
¿Que opinais?
PD: No se si hay algún plugin o algo. Algo me suena.
Hola Paco,
una pregunta: ¿siempre que crees uno de esos modelos se deben de crear
los demás o sólo en determinadas circunstancias?
Si tu respuesta es que sí contesta a esta otra pregunta: ¿los datos
que necesitas para crear los otros objetos los puedes obtener a partir
del modelo principal o cómo los obtienes?
Si tu respuesta es que sí a las dos entonces yo crearía los modelos
relacionados en un callback (after_create, por ejemplo) del modelo
principal.
Si tu respuesta a la segunda cuestión es que no, hay que ver de dónde
tienes que obtener los datos para los modelos relacionados: nuevos
formularios, etc
Si tu respuesta a la primera cuestión es que no entonces, la lógica de
creación de modelos relacionados debería de estar en el controlador y
no en el propio modelo.
Todo esto si te he entendido bien, que espero que
sí.
Y no, no hace falta ningún plugin
Por ejemplo tengo el modelo PRODUCTO y el modelo SUBPRODUCTO (hay
PRODUCTOS
que tienen UN SUBPRODUCTO pero otros no, relacion 1:1). Los subproductos
pertenecen a categorias (relacion 1:n).
Entonces para dar de alta un producto no tiene mayor complicacion. Pero
para
un subproducto necesito crear un producto primero y asignarle una
categoria.
Ademas opcionalmente a un subproducto se le puede relacionar uno o
varios
objetos de tipo FOTO.
¿Como debo hacerlo?
Yo investigaría las posibilidades del after_create [1], en
combinacióncon la lógica adecuada para asignar las categorías en el controlador.
[1]
http://api.rubyonrails.com/classes/ActiveRecord/Callbacks.html#M000914