2010-09-29 20 views
7

Pensé que era posible crear un nuevo objeto de modelo a través de una asociación.Objeto de modelo nuevo a través de una asociación

class Order < ActiveRecord::Base 
    belongs_to :basket 
end 

class Basket < ActiveRecord::Base 
    has_one :order 
end 

order = Order.new() 
basket = order.basket.new() # NoMethodError: undefined method `new' for nil:NilClass 
+3

Para información: En Ruby, los paréntesis vacíos en 'new' generalmente se omiten, es decir' Order.new'. –

Respuesta

23

Lo es, pero su sintaxis es un poco mal:

class Order < ActiveRecord::Base 
    belongs_to :basket 
end 

class Basket < ActiveRecord::Base 
    has_one :order 
end 

order = Order.new() 
basket = order.create_basket() 

Uso build_basket si no desea guardar la cesta de inmediato; si la relación es has_many :baskets en su lugar, use order.baskets.create() y order.baskets.build()

+0

Gracias Chris por su respuesta, por interés intenté basket = order.basket.new() cuando la relación es has_many: baskets, y funcionó bien. Es todo muy confuso. – pingu

+1

Es posible que funcione, pero no estoy seguro de si la colección order.basket contendrá su nuevo objeto creado, lo que significa que puede guardar 'order' y tienen todos los objetos secundarios guarda automáticamente y se hace referencia a' order' (sin especificar en los parámetros) . – gertas

Cuestiones relacionadas