【问题标题】:Best way to model these Rails relationships建模这些 Rails 关系的最佳方法
【发布时间】:2010-12-14 03:59:12
【问题描述】:

我有以下场景,我想为 Rails 应用程序建模。

我有一个属于一家公司的联系人模型。联系人可以创建查询,因此联系人可以进行许多查询。查询可以有许多消息,这些消息可以来自多个联系人,也可以发往多个联系人。消息可以属于查询、公司或联系人。

这让我对如何最好地建模感到困惑。有什么想法吗?

最好的问候,

理查德·莫斯

【问题讨论】:

    标签: ruby-on-rails ruby model modeling


    【解决方案1】:

    在这种情况下,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 可能也有一些见解。

    【讨论】:

      【解决方案2】:

      听起来混乱是在消息上,而不是其他部分。

      对于每个查询、公司和联系人,我都会使用 belongs_to(我假设您有一些与查询无关的消息)。然后我会进行自定义验证以确保至少指定了其中一个 - 但否则不要为其中任何一个执行 validates_presence_of。

      辅助方法可以减轻查找给定消息与什么相关联的痛苦,因此您不必检查这三个关系中的每一个来寻找一个不为零的关系。

      【讨论】:

        猜你喜欢
        • 2010-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多