2009-04-07 86 views
3

在我的网上商店,每个订单都与送货地址和账单地址相关(当然,它们可以是相同的)。这是我第一次来模拟这种尝试:如何在轨中订购送货地址和账单地址

Class Order 
    belongs_to :billing_address, :class => "Address" 
    belongs_to :shipping_address, :class => "Address" 

这工作得很好,但现在的形式佣工不工作。即,form_for只会生成名称为address[zipcode]的字段,因此我必须手动将其破解以获得billing_address[zipcode]shipping_address[zipcode]

我想我可以使用单表继承的子类AddressShippingAddressBillingAddress,但是这似乎有点哈克给我(和Best way to model Customer <--> Address违背一些很好的答案)。

回答

2

我有两个想法,你,要么或两者可以做的伎俩:

Class Order 
    belongs_to :billing_address, :class_name => "Address" 
    belongs_to :shipping_address, :class_name => "Address" 

Class Order 
    belongs_to :address, :foreign_key => "billing_address_id" 
    belongs_to :address, :foreign_key => "shipping_address_id" 

请让他们与你的形式助手一个尝试,我很想知道,如果它出来您。希望能帮助到你!

3

您需要指定类名称,因为它不是BillingAddress或ShippingAddress。

class Order < ActiveRecord::Base 
    # foreign key not required here because it will look for 
    # association_name_id, e.g. billing_address_id, shipping_address_id 
    belongs_to :billing_address, :class_name => "Address" 
    belongs_to :shipping_address, :class_name => "Address" 
end 

要完成关联:

class Address < ActiveRecord::Base 
    # foreign key required here because it will look for class_name_id, 
    # e.g. address_id 
    has_many :billing_orders, :class_name => "Order", 
    :foreign_key => "billing_address_id" 
    has_many :shipping_orders, :class_name => "Order", 
    :foreign_key => "shipping_address_id" 
end 
+2

这岂不是更有意义的地址属于一个订单? – Mohamad 2013-07-24 16:55:32

相关问题