【问题标题】:Rails: NameError: uninitialized constant on join tableRails:NameError:连接表上的未初始化常量
【发布时间】:2013-08-25 12:42:38
【问题描述】:

我似乎无法解决名称约定,或者如果我不正确地加入它们。

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

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

从公司模式来看:

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

用户.rb

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

公司.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

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

【问题讨论】:

    标签: sql ruby-on-rails ruby join


    【解决方案1】:

    您的关联 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 为您提供了解决方案。

    【讨论】:

      【解决方案2】:

      应该是:

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

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

      【讨论】:

        【解决方案3】:

        由于您的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
        

        【讨论】:

          猜你喜欢
          • 2014-12-11
          • 2020-06-26
          • 1970-01-01
          • 2018-02-25
          • 2015-10-06
          • 1970-01-01
          • 1970-01-01
          • 2016-11-24
          • 1970-01-01
          相关资源
          最近更新 更多