【发布时间】:2010-12-14 03:59:12
【问题描述】:
我有以下场景,我想为 Rails 应用程序建模。
我有一个属于一家公司的联系人模型。联系人可以创建查询,因此联系人可以进行许多查询。查询可以有许多消息,这些消息可以来自多个联系人,也可以发往多个联系人。消息可以属于查询、公司或联系人。
这让我对如何最好地建模感到困惑。有什么想法吗?
最好的问候,
理查德·莫斯
【问题讨论】:
标签: ruby-on-rails ruby model modeling
我有以下场景,我想为 Rails 应用程序建模。
我有一个属于一家公司的联系人模型。联系人可以创建查询,因此联系人可以进行许多查询。查询可以有许多消息,这些消息可以来自多个联系人,也可以发往多个联系人。消息可以属于查询、公司或联系人。
这让我对如何最好地建模感到困惑。有什么想法吗?
最好的问候,
理查德·莫斯
【问题讨论】:
标签: ruby-on-rails ruby model modeling
在这种情况下,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 可能也有一些见解。
【讨论】:
听起来混乱是在消息上,而不是其他部分。
对于每个查询、公司和联系人,我都会使用 belongs_to(我假设您有一些与查询无关的消息)。然后我会进行自定义验证以确保至少指定了其中一个 - 但否则不要为其中任何一个执行 validates_presence_of。
辅助方法可以减轻查找给定消息与什么相关联的痛苦,因此您不必检查这三个关系中的每一个来寻找一个不为零的关系。
【讨论】: