Rails:NameError:连接表上的未初始化常量

时间:2013-08-22 16:40:05

标签: sql ruby-on-rails ruby join

我似乎无法解决名称约定或我是否错误地加入它们。

这是我从用户模型中得到的错误:

> 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

我一直在查看示例,但老实说我不明白为什么它会继续爆炸。如果需要任何其他信息,我会提供,我感谢您给予的任何帮助。

3 个答案:

答案 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