2016-07-26 72 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