2016-07-26 117 views
0

我有三种模式 - CompanyUserCompanyUser。这些协会如下。模特协会 - has_many:通过

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,在模型关联进行什么moddifications ?

任何帮助,将不胜感激。

+0

可以请你写你在使用轨控制台上current_user.company得到的输出? – power

+0

你不能把你的'FK'放在用户模型中,所以把'belongs_to:company'替换成'hash_many:companies,:through =>:company_users' –

回答

2

它应该是:

has_many :companies, through: :company_users 

一个的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

+0

这个场景如下。 一个公司可以有5个用户。 用户属于一家公司。 如果我想获取current_user.copmany,那么这个模型关联会是什么? – prajeesh

+0

更新了答案 – Deep

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

then you can call, 

`current_user.company` 
0

按照你的逻辑, 我想你可能需要创建一个新的变量会话current_company_user这是对象CompanyUser。 然后,获取公司通过:

current_company_user.company