我似乎无法解决名称约定或我是否错误地加入它们。
这是我从用户模型中得到的错误:
> 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 :(得分: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会为您提供解决方案。
答案 1 :(得分:0)
应该是:
has_many :company_users
has_many :companies, :through => :company_users
只有最后一个词应该是多元化的
答案 2 :(得分: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