我正在为一家提供审计服务的公司编写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
应用程序将向用户显示属于用户分配的客户端的电话号码列表,我需要将用户模型与客户端模型相关联,问题是:所有活动记录关联中的哪一个为该问题提供了最佳解决方案?
在阅读了RubyonRails指南中描述的关联基础知识后,我想我可以将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
你认为上面的解决方案怎么样?或者哪一个会是更优雅的解决方案?
创建一个名为Relationship(或其他什么)的表,其中包含两个foreign_id,它们涉及您希望用户和客户端能够相互做什么(例如能够"跟随"对方=>Follower_id和Following_id)。在模型中定义与这些id相关的方法,然后在视图中调用这些方法来显示关系。