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
Client
和ClientManager
数据模型之间的关系,这是与has_many through
直接的多对多关系。 为此,您需要在db clients
, client_managers
, projects
设置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或多个客户端
更多信息在这里