有没有办法在rails中生成多对多的可选关系?
我有Client
模型和ClientManager
模型 - 我希望Client
有0,1或多个client_managers
。但我也希望Clientmanger
能够拥有0个,1个或更多个clients
。这可能吗?如何?
使用rails 5.
为了清晰/目的而更新:我希望客户管理员能够管理多个客户端,甚至没有客户端管理员。并且客户能够由0,1或多个客户经理管理
答案 0 :(得分:1)
如果它是NxN关系,则应创建属于Client和ClientManager的另一个模型。我们称之为管理,例如:
<li><span>DATE:</span>
<?php $meta_value = get_post_meta($post->ID, 'date', true);
if (!empty($meta_value)) {
echo '<li>'. $meta_value .'</li>';
} ?>
</li>
那会产生这样的东西:
rails g model Management client:references client_manager:references
然后,在您的客户端模型上:
class Management < ActiveRecord::Base
belongs_to :client
belongs_to :client_managers
end
并在您的ClientManager上:
has_many :managements
has_many :client_managers :through => :managements
希望这有助于你弄明白。祝你好运!
答案 1 :(得分:1)
您还可以使用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
答案 2 :(得分:1)
这是RecyclerView
和has_many through
数据模型之间Client
关系的简单多对多关系。为此,您需要在数据库ClientManager
,clients
,client_managers
projects
访问
# 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
提供0个,1个或多个与Client.last.client_managers
Client.last
提供与ClientManager.last.clients