2013-08-22 42 views
3

我似乎無法解決名稱約定或者如果我不正確地加入它們。Rails:NameError:連接表上未初始化的常量

這是我從用戶模型得到的錯誤:

> user.companies 
NameError: uninitialized constant User::CompaniesUser 

而且從公司的模式:

> company.users 
NameError: uninitialized constant Company::CompaniesUser 

user.rb

has_many :companies_users 
has_many :companies, :through => :companies_users 

company.rb

has_many :companies_users 
has_many :users, :through => :companies_users 

company_user.rb

class CompanyUser < ActiveRecord::Base 
    belongs_to :company 
    belongs_to :user 
end 

我一直在尋找向上穿過的例子,但我真的不明白爲什麼它使爆炸。如果有任何額外的信息需要,我會提供,我感謝任何幫助。

回答

0

它應該是:

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

只有最後一個字應該使用複數

6

你的公會companies_users將Rails的被映射到名爲CompaniesUser類,因爲"companies_users".classify會給你CompaniesUser。但是要關聯的類是CompanyUser,所以在這種情況下,解決辦法是修改您的協會包括class_name選項,如下所示:

# user.rb 

has_many :companies_users, class_name: CompanyUser 
has_many :companies, :through => :companies_users 

# company.rb 

has_many :companies_users, class_name: CompanyUser 
has_many :users, :through => :companies_users 

更新:這是當然的,如果你想堅持的關聯名稱companies_users,否則@Babur將爲您提供解決方案。

0

由於您的Company模型中的has_many :companies_users,Rails試圖爲該表加載模型類,該慣例將被稱爲CompaniesUser。爲了使你的代碼的工作,你既可以改變你的has_many聲明

has_many :company_users 

甚至完全擺脫了CompanyUser模型,並使用has_and_belongs_to_many代替。

class User 
    has_and_belongs_to_many :companies 
end 

class Company 
    has_and_belongs_to_many :users 
end 
相關問題