rails中可选的多对多关系?

有没有办法在rails中生成可选的多对多关系?

我有一个Client模型和一个ClientManager模型 – 我希望Client有0个,1个或多个client_managers 。 但我也希望Clientmanger能够拥有0个,1个或更多clients 。 这可能吗? 如何?

使用导轨5。

为了清晰/目的而更新:我希望客户管理员能够管理多个客户端,甚至没有客户端管理员。 客户端可以由0,1或多个客户经理管理

如果它是NxN关系,则应创建属于Client和ClientManager的另一个模型。 我们称之为管理,例如:

 rails g model Management client:references client_manager:references 

这会产生这样的事情:

 class Management < ActiveRecord::Base belongs_to :client belongs_to :client_managers end 

然后,在您的客户端模型上:

  has_many :managements has_many :client_managers :through => :managements 

在您的ClientManager上:

  has_many :managements has_many :clients :through => :managements 

希望这可以帮助你弄清楚。 祝好运!

您还可以使用has_and_belongs_to_many关联。

你的模型会是

 class Client < ActiveRecord::Base has_and_belongs_to_many :managers end class Manager< ActiveRecord::Base has_and_belongs_to_many :clients end 

has_many through ClientClientManager数据模型之间的关系,这是与has_many through直接的多对多关系。 为此,您需要在db clientsclient_managersprojects设置3个表

 # models/client.rb class Client < ApplicationRecord has_many :projects has_many :client_managers, through: :projects end # models/project.rb # projects table schema should have- client_id:integer client_manager_id:integer class Project < ApplicationRecord belongs_to :client belongs_to :client_manager end # models/client_manager.rb class ClientManager < ApplicationRecord has_many :projects has_many :clients, through: :projects end 

访问

Client.last.client_managers提供与Client.last关联的0,1或多个client_managers

ClientManager.last.clients提供与ClientManager.last关联的0,1或多个客户端

更多信息在这里