2011-06-15 39 views
1

我发现这有点心灵弯曲,想要一些想法。我的设计去喜欢这样的:Rails:需要帮助定义地址表的关联

  • 有建设者表,每个制造商可以有一个邮寄地址
  • 有一个客户表,每个客户可以有一个邮政地址和帐单地址
  • 有一个地址表

我需要定义的建设者,地址和客户端,地址

我最初的数据库设计是这样的之间的关联:

Builders 
-------------------- 
id 
postal_address_id 
... 

Clients 
-------------------- 
id 
postal_address_id 
billing_address_id 
... 

Addresses 
------------------- 
id 
... 

这似乎是合乎逻辑的我,但我有麻烦在轨协会把这项。

我在想,地址可以定义一个belongs_to:可寻址的多态关联。但是,如何处理客户的邮政地址和账单地址。

任何帮助将不胜感激。

回答

8

在这样,我会用STI(单表继承)的情况下,我认为这是对于完美的情况下。

首先,您必须在地址模型中添加一个字段“type”。
然后,您可以定义类这样的:

class Client 
    has_one :billing_address, :as => :addressable 
    has_one :shipping_address, :as => :addressable 
end 

class Address < ActiveRecord:Base 
    belongs_to :addressable, :polymorphic => true 
end 

class BillingAddress < Address 
end 

class Shipping Address < Address 
end 

了解更多关于STI in the rails doc

4

您可以在addressable表中只有address_type列。然后你可以的范围,想使协会:

class Client 
    has_one :biling_address, :as => :addressable, :conditions => {:address_type => "billing"} 
    has_one :shipping_address, :as => :addressable, :conditions => {:address_type => "shipping"} 
end