【发布时间】:2014-12-05 21:00:52
【问题描述】:
我想在同一个模型(用户)之间建立多对多关系。
我有用户模型:
class User < ActiveRecord::Base
has_many :broker_clients
has_many :clients, :through => :broker_clients
end
和BrokerClient:
class BrokerClients < ActiveRecord::Base
belongs_to :broker, class_name: "User"
belongs_to :client, class_name: "User"
end
当我使用 Rails 控制台并执行以下操作时:
>> User.first.clients
User Load (0.7ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1
NameError: uninitialized constant User::BrokerClient
from /Users/info/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.0.1/lib/active_record/inheritance.rb:125:in `compute_type'
from /Users/info/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.0.1/lib/active_record/reflection.rb:178:in `klass'
from /Users/info/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.0.1/lib/active_record/reflection.rb:420:in `block in source_reflection'
from /Users/info/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.0.1/lib/active_record/reflection.rb:420:in `collect'
from /Users/info/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.0.1/lib/active_record/reflection.rb:420:in `source_reflection'
from /Users/info/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.0.1/lib/active_record/reflection.rb:557:in `check_validity!'
from /Users/info/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.0.1/lib/active_record/associations/association.rb:26:in `initialize'
from /Users/info/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.0.1/lib/active_record/associations/has_many_through_association.rb:9:in `initialize'
from /Users/info/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.0.1/lib/active_record/associations.rb:157:in `new'
from /Users/info/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.0.1/lib/active_record/associations.rb:157:in `association'
from /Users/info/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.0.1/lib/active_record/associations/builder/association.rb:70:in `clients'
from (irb):4
from /Users/info/.rvm/gems/ruby-2.0.0-p451/gems/railties-4.0.1/lib/rails/commands/console.rb:90:in `start'
from /Users/info/.rvm/gems/ruby-2.0.0-p451/gems/railties-4.0.1/lib/rails/commands/console.rb:9:in `start'
from /Users/info/.rvm/gems/ruby-2.0.0-p451/gems/railties-4.0.1/lib/rails/commands.rb:62:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'>>
我在这里做错了什么来得到这个错误:
NameError: uninitialized constant User::BrokerClient
【问题讨论】:
-
看看你的经纪人客户,这没有多大意义。通常是
belongs_to :broker, class_name: 'User'和belongs_to :client, class_name: 'User'。然后User将是has_many :clients, through: :broker_clients。 -
嗯,Client 和 Broker 是 User 的子类。我修改了 BrokerClient : class BrokerClients
-
你的类应该是单数的。
class BrokerClient如果您的表是broker_clients。 ActiveRecord 正在根据您的表名寻找合适的类,但它不存在。 -
更改了类 BrokerClients -> BrokerClient 但仍然收到此错误:NameError: uninitialized constant User::BrokerClient
标签: ruby-on-rails ruby-on-rails-4 many-to-many has-many-through