2013-08-22 5 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 будет отображен класс с именем CompaniesUser по Rails, потому что "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

Из-за вашего has_many :companies_users в вашей модели Company 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