我有以下場景,我想爲Rails應用程序建模最佳方式。建模這些Rails關係的最佳方法
我有一個屬於公司的聯繫人模式。聯繫人可以創建查詢,以便聯繫人可以進行許多查詢。查詢可以有許多來自許多聯繫人的消息。消息可以屬於查詢,公司或聯繫人。
這一直困擾着我如何最好地模擬這一點。有任何想法嗎?
最好的問候,
理查德莫斯
我有以下場景,我想爲Rails應用程序建模最佳方式。建模這些Rails關係的最佳方法
我有一個屬於公司的聯繫人模式。聯繫人可以創建查詢,以便聯繫人可以進行許多查詢。查詢可以有許多來自許多聯繫人的消息。消息可以屬於查詢,公司或聯繫人。
這一直困擾着我如何最好地模擬這一點。有任何想法嗎?
最好的問候,
理查德莫斯
這聽起來像混亂的信息,而不是其他部位。
我會與belongs_to每個查詢,公司和聯繫人(我假設你有一些消息沒有與查詢相關)。然後,我會做一個自定義驗證,以確保至少指定了其中的一個 - 但否則,不要爲它們中的任何一個執行validates_presence_of。
輔助方法可以緩解查找給定消息與什麼關聯的痛苦,所以你不必檢查這三個關係中的每一個,尋找一個不爲零的關係。
在這種情況下,看起來Message
應該是polymorphic,因爲它們可以屬於許多不同的型號。由於聯繫人可以向其他聯繫人發送郵件,因此Contact
將與郵件有兩個關聯,一個用於sent_messages
,另一個用於received_messages
。 Message
將通過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也可能有一些洞察力。