模型联合 - has_many:通过

时间:2016-07-26 06:49:59

标签: ruby-on-rails ruby

我有三个模型 - CompanyUserCompanyUser。协会如下。

Company.rb

  has_many :company_users
  has_many :users, :through => :company_users

User.rb

  has_many :company_users, :dependent => :destroy
  belongs_to :company

CompanyUser.rb

  belongs_to :company
  belongs_to :user

要获取current_user.company,要在模型关联中进行哪些修改?

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:2)

应该是:

has_many :companies, through: :company_users
  

a has_many:通过关联经常用于设置多对多   与另一个模型的连接。这种关联表明了   声明模型可以与另一个的零个或多个实例匹配   通过第三个模型进行模型化。

因此,如果您要创建三个模型并建立has_many :through关联,我相信User will have many CompaniesCompany will have many Users

但如果您需要该用户只属于一个company而不是创建第三个模型,请在company_id表格中保存users

<强>更新

现在,您的方案为A company can have may usersUser belongs to a single company,您需要两个模型:UserCompany。您的User模型应具有属性company_id,然后company_id应仅保存在users表中。关联如下:

class User < ActiveRecord::Base
  belongs_to :company
end

class Company < ActiveRecord::Base
  has_many :users
end

然后你可以current_user.company

您可以在RailsGuides

中获取有关关联的更多信息

答案 1 :(得分:0)

根据你所采取的协会,

用户已通过公司用户模式与公司建立关联,因此用户可能会根据您的关联拥有多家公司。

所以,

  class User < ActiveRecord::Base

    has_many :company_users, :dependent => :destroy
    has_many :companies, :through => :company_users

  end  

current_user.companies会给你这些公司。

但是,如果您只需要一个公司供用户使用,那么

  class User < ActiveRecord::Base
        belongs_to :company
    end  

使用belongs_to公司并将company_id保存在users表中,

then you can call,

`current_user.company`

答案 2 :(得分:0)

根据你的逻辑, 我想你可能需要创建一个新的变量会话current_company_user,它是对象CompanyUser。 然后,通过以下方式获取公司:

current_company_user.company