2011-08-08 197 views
9

對於CRM應用程序,我希望能夠將人員模型直接關聯到帳戶模型或公司模型,並將模型關聯到帳戶模型。另外,我想將地址模型關聯到公司或個人。這是我想到的:Rails模型屬於任一模型或另一個模型

class Account 
    has_many :Persons 
    has_many :Companies 
end 

class Person 
    belongs_to :Account 
    belongs_to :Company 
    has_one :Address 
end 

class Company 
    belongs_to :Account 
    has_many :Persons 
    has_one :Address 
end 

class Address 
    belongs_to :Person 
    belongs_to :Company 
end 

所以一個帳戶將是一個「人帳戶」或「商業帳戶」取決於該協會。它們將是相互排斥的。我計劃在Person表中擁有外鍵account_id和company_id。同樣,我會在地址表中使用外鍵person_id和company_id。每種情況下一個外鍵都是空的。

這在Rails中可以嗎?如果沒有,任何建議將不勝感激。

+0

你可以用模型驗證,以確保只有一個類型的關聯存在。不知道更大的圖片答案是... – jaydel

回答

8

看看多態關聯。我認爲這是你在找什麼: http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

class Account 
    belongs_to :User, :polymorphic => true 
end 

class Person 
    belongs_to :Account, :as => :User 
    belongs_to :Company 
    has_one :Address, :as => :User 
end 

class Company 
    belongs_to :Account, :as => :User 
    belongs_to :Persons 
    has_one :Address, :as => :User 
end 

class Address 
    belongs_to :User, :polymorphic => true 
end 
... 

問候斯文

+2

謝謝斯文!這正是我需要的。只需閱讀「The Rails 3 Way」中的多態關聯。我感謝您的幫助。 –

相關問題