我有以下型号:
class Person < ActiveRecord::Base
has_many :accounts, :through => :account_holders
has_many :account_holders
end
class AccountHolder < ActiveRecord::Base
belongs_to :account
belongs_to :people
end
class Account < ActiveRecord::Base
has_many :people, :through => :account_holders
has_many :account_holders
end
但是,在使用此关系时遇到问题。 Account.first.account_holders工作正常,但Account.first.people返回:
NameError: uninitialized constant Account::People
from /Users/neil/workspace/xx/vendor/rails/activesupport/lib/active_support/dependencies.rb:105:in `const_missing'
from /Users/neil/workspace/xx/vendor/rails/activerecord/lib/active_record/base.rb:2204:in `compute_type'
from /Users/neil/workspace/xx/vendor/rails/activesupport/lib/active_support/core_ext/kernel/reporting.rb:11:in `silence_warnings'
from /Users/neil/workspace/xx/vendor/rails/activerecord/lib/active_record/base.rb:2200:in `compute_type'
from /Users/neil/workspace/xx/vendor/rails/activerecord/lib/active_record/reflection.rb:156:in `send'
from /Users/neil/workspace/xx/vendor/rails/activerecord/lib/active_record/reflection.rb:156:in `klass'
from /Users/neil/workspace/xx/vendor/rails/activerecord/lib/active_record/associations/has_many_through_association.rb:73:in `find_target'
from /Users/neil/workspace/xx/vendor/rails/activerecord/lib/active_record/associations/association_collection.rb:353:in `load_target'
from /Users/neil/workspace/xx/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:139:in `inspect'
有什么想法吗?
答案 0 :(得分:5)
belongs_to需要单数形式。在AccountHolder
:
belongs_to :person
答案 1 :(得分:1)
我遇到了同样的问题,就像上面的答案所示,当我将联结表中的belongs_to符号值更改为单数时(在名称末尾删除了's'),它得到修复。
在我的练习中,我有:
guy.rb
class Guy < ActiveRecord::Base
attr_accessible :name
has_many :junctions
has_many :girls, through: :junctions
end
girl.rb
class Girl < ActiveRecord::Base
attr_accessible :name
has_many :junctions
has_many :guys, through: :junctions
end
junction.rb
class Junction < ActiveRecord::Base
attr_accessible :girl_id, :guy_id
belongs_to :girl # girls wouldn't work - needs to be singular
belongs_to :guy # guys wouldn't work - needs to be singular
end
然后这种多对多关系有效......