2014-07-14 88 views
0

这是我加盟模式:轨道4:的has_many:通过错误

class CompanyUser < ActiveRecord::Base 
    belongs_to :company 
    belongs_to :user 
end 

User型号:

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    ROLES = %w[admin requestor requestor_limited shipping_vendor].freeze 

    attr_accessor :temp_password 

    has_many :companies_users 

    ... 

end 

如果我在控制台中运行以下命令:

u = User.first 
u.companies 

这是我得到的错误:

NameError: uninitialized constant User::CompaniesUser

+0

它应该是'has_many company_users',并且你应该在'User'模型中拥有'has_many:users,:through => company_users'。 – Pavan

回答

4

的has_many通过关系应该是这样的:

在应用程序/模型/ company.rb文件

has_many :company_users 
    has_many :users, :through => :company_users 

在应用程序/模型/ user.rb文件

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

在应用程序/模型/ company_user.rb文件

belongs_to :company 
    belongs_to :user 

如果你想删除的公司/用户何时删除company_users表中的相关记录,

添加,, :dependent => :destroy在的has_many关系到底公司和用户模型。

希望这可以帮到你..

谢谢。

+0

我将表命名为'company_users',是否应该命名为'company_users'? – dennismonsewicz

+1

是..你必须.. –

+0

感谢您的帮助! – dennismonsewicz

3

它必须是

has_many :company_users 

“CompanyUser” .tableize => “company_users”

1

模型应是:

class CompaniesUser < ActiveRecord::Base 
    belongs_to :company 
    belongs_to :user 
end 

或者has_many声明sheel明确定义为:

class User < ActiveRecord::Base 
    has_many :company_users 
end