2011-04-22 22 views
8

Digamos que tengo un modelo de usuario y un modelo de servicio independientes.Ruby on Rails: Crear correctamente una instancia de modelo que tenga relación con varios modelos

También tengo un modelo de pedido que contiene las órdenes creadas por un usuario para un servicio. Me pregunto cómo podría crear correctamente una entrada de orden en rieles.

Así es como crearé una entrada de pedido si se refiere solo a otro modelo, digamos usuario.

@order = current_user.orders.build(params[:order]) 
@order.save 

Ahora, ¿cómo hago eso si la orden se refiere a varios modelos (usuario y servicio)?

Supongamos que el modelo de pedido tiene los atributos user_id y service_id y todos los objetos del modelo están correctamente etiquetados con belongs_to y has_ ​​many relaciones.

Respuesta

2

Esta es la forma en que lo haría para resolver este problema , preferiblemente de la primera manera.

current_user.orders.create!(params[:order].merge({ :service => @service })) 

or 

@service.orders.create!(params[:order].merge({ :user => current_user })) 
6
@order = Order.new(params[:order]) 
@order.user = current_user 
@order.service = @service 
@order.save 

Dónde @service es un poco de su Servicio descabellada

+0

No responde la pregunta en absoluto. –

+0

Oh veo, lo siento. Actualizaré mi respuesta ahora – fl00r

0

Creo que no hay ningún método de 'magia' para este caso. Pero la lógica es que se crea un pedido cuando el usuario y el servicio existen todavia, así que el servicio ya posee el atributo user_id y probablemente debería llamar a construir en service.orders:

@order = service.orders.build(params[:order].merge({ :user_id => service.user_id })) 
+0

Si bien tener user_id en el modelo de servicio no es una opción para mí, tiene sentido hacer algo similar a su respuesta. Prefiero combinar service_id con params de pedido y dejar que el usuario genere el pedido. –

Cuestiones relacionadas