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

Ala*_*de_ 4 ruby sql join ruby-on-rails

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

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

> user.companies
NameError: uninitialized constant User::CompaniesUser
Run Code Online (Sandbox Code Playgroud)

从公司模型:

> company.users
NameError: uninitialized constant Company::CompaniesUser
Run Code Online (Sandbox Code Playgroud)

user.rb

has_many :companies_users
has_many :companies, :through => :companies_users
Run Code Online (Sandbox Code Playgroud)

company.rb

has_many :companies_users
has_many :users, :through => :companies_users
Run Code Online (Sandbox Code Playgroud)

company_user.rb

class CompanyUser < ActiveRecord::Base
  belongs_to :company
  belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)

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

vee*_*vee 6

您的关联companies_users将映射到CompaniesUserRails 命名的类,因为它"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
Run Code Online (Sandbox Code Playgroud)

更新:当然,如果您想坚持使用关联名称companies_users,那么@Babur会为您提供解决方案.


Bab*_*nov 0

它应该是:

has_many :company_users
has_many :companies, :through => :company_users
Run Code Online (Sandbox Code Playgroud)

只有最后一个词应该是复数形式