我为一家提供审计服务的公司编写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
您如何看待上述解决方案?或哪一个更优雅的解决方案?
答案 0 :(得分:0)
使用两个foreign_id创建一个名为Relationship(或其他)的表,关于您希望用户和客户能够彼此做什么(例如,能够&#34;关注&#34;彼此=&gt; Follower_id和Following_id)。在模型中定义与这些ID相关的方法,然后在视图中调用这些方法以显示关系。