2011-06-15 28 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