2009-11-07 58 views
1

我有以下場景,我想爲Rails應用程序建模最佳方式。建模這些Rails關係的最佳方法

我有一個屬於公司的聯繫人模式。聯繫人可以創建查詢,以便聯繫人可以進行許多查詢。查詢可以有許多來自許多聯繫人的消息。消息可以屬於查詢,公司或聯繫人。

這一直困擾着我如何最好地模擬這一點。有任何想法嗎?

最好的問候,

理查德莫斯

回答

0

這聽起來像混亂的信息,而不是其他部位。

我會與belongs_to每個查詢,公司和聯繫人(我假設你有一些消息沒有與查詢相關)。然後,我會做一個自定義驗證,以確保至少指定了其中的一個 - 但否則,不要爲它們中的任何一個執行validates_presence_of。

輔助方法可以緩解查找給定消息與什麼關聯的痛苦,所以你不必檢查這三個關係中的每一個,尋找一個不爲零的關係。

2

在這種情況下,看起來Message應該是polymorphic,因爲它們可以屬於許多不同的型號。由於聯繫人可以向其他聯繫人發送郵件,因此Contact將與郵件有兩個關聯,一個用於sent_messages,另一個用於received_messagesMessage將通過contact_id與發件人綁定。

class Contact < ActiveRecord::Base 
    belongs_to :company 
    has_many :enquiries 
    has_many :sent_messages, :class_name => "Message" 
    has_many :received_messages, :as => :messageable, :class_name => "Message" 
end 

class Company < ActiveRecord::Base 
    has_many :contacts 
    has_many :messages, :as => :messageable 
end 

class Enquiry < ActiveRecord::Base 
    belongs_to :contact 
    has_many :messages, :as => :messageable 
end 

class Message < ActiveRecord::Base 
    belongs_to :contact 
    belongs_to :messageable, :polymorphic => true 
end 

這應該很好地模擬您的關係需求。如果你想更好地理解它,Railscast on Polymorphic Associations也可能有一些洞察力。

相關問題