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]

我想我可以使用单表继承将子类Address化为ShippingAddressand BillingAddress,但这对我来说似乎有点 hacky(并且与建模 Customer <--> Address 的最佳方式中的一些好的答案相矛盾)。

4

2 回答 2

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
于 2009-04-07T21:13:48.797 回答
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"

请与您的表单助手一起尝试一下,我很想知道它是否适合您。希望能帮助到你!

于 2009-04-07T19:46:35.353 回答