如何在Active Record中关联用户和客户组合模型?

时间:2015-03-28 21:08:54

标签: ruby-on-rails ruby activerecord

我为一家提供审计服务的公司编写rails客户电话簿。该公司拥有客户组合,所有这些客户分为所有员工(经理,老年人和助理)。请参阅下图,例如:

                               Manager
                            40 customers
                                  |
                   ________________________________
                   |                              |
                Senior                          Senior
             20 customers                    20 customers
                   |                              |
           __________________             _________________
           |                |             |               |
      Assistant        Assistant      Assistant        Assistant
    10 customers     10 customers    10 customers     10 customers


               *Total customer portfolio: 40 customers

应用程序将向用户显示属于用户已分配的客户端的电话号码列表,我需要将User模型与Client模型关联,问题是:所有Active Record关联中的哪一个为这个问题提供最佳解决方案?

在阅读Ruby on Rails指南中描述的association basics之后,我认为我可以将has_many :through与第三个模型(Assignment)一起使用,因为投资组合中的每个客户都需要一个经理,分配给它的高级助手和助手(因为它远离键盘)。

我的解决方案如下:

class User < ActiveRecord::Base
  has_many :assignments
  has_many :clients, through: :assignments
end

class Assignment < ActiveRecord::Base
  belongs_to :user
  belongs_to :client    
end

class Client < ActiveRecord::Base
  has_many :assignments
  has_many :users, through: :assignments
end

您如何看待上述解决方案?或哪一个更优雅的解决方案?

1 个答案:

答案 0 :(得分:0)

使用两个foreign_id创建一个名为Relationship(或其他)的表,关于您希望用户和客户能够彼此做什么(例如,能够&#34;关注&#34;彼此=&gt; Follower_id和Following_id)。在模型中定义与这些ID相关的方法,然后在视图中调用这些方法以显示关系。