rails中可选的多对多关系?

时间:2016-11-30 12:34:36

标签: ruby-on-rails ruby-on-rails-5

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

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

使用rails 5.

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

3 个答案:

答案 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)

这是RecyclerViewhas_many through数据模型之间Client关系的简单多对多关系。为此,您需要在数据库ClientManagerclientsclient_managers

中设置3个表格
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_managers

Client.last提供与ClientManager.last.clients

相关联的0个,1个或多个客户端

more info here