rails has_many :通过关联不起作用

rails has_many :through association doesnt work

我有一个问题 has_many 通过关联。

我有一个账户模型,里面有很多办公室和酒店 account.rb :

class Account < ActiveRecord::Base

  # associations
  has_many :partnerships, through: :hotels, dependent: :destroy
  has_many :partnerships, through: :offices, dependent: :destroy
  has_many :users, through: :hotels, dependent: :destroy
  has_many :hotels, dependent: :destroy
  has_many :offices, dependent: :destroy
  belongs_to :admin, class_name: "User", foreign_key: "admin_user_id", dependent: :destroy

然后我有一个合作伙伴关系 table 这是酒店和办公室之间的联合 table 因此酒店和办公室都有很多合作伙伴:

class Hotel < ActiveRecord::Base
  has_many :partnerships
  belongs_to :account
  has_and_belongs_to_many :user

 class Office < ActiveRecord::Base
  belongs_to :account
  has_and_belongs_to_many :users
  has_many :partnerships

最后是我的合作模式:

class Partnership < ActiveRecord::Base

  belongs_to :hotel
  belongs_to :office

然而,当我使用具有合作酒店的帐户 (@account.partnerships) 测试帐户与合作伙伴之间的关联时,我得到一个空 [],而当我直接使用相关酒店时 (@hotel.partnerships), 我得到了相关合作伙伴的列表。

你能告诉我为什么这些关联不起作用吗:

 has_many :partnerships, through: :hotels, dependent: :destroy
 has_many :partnerships, through: :offices, dependent: :destroy

第二个 has_many :partnerships 覆盖第一个。

has_many :partnerships, through: :hotels, dependent: :destroy # 1
has_many :partnerships, through: :offices, dependent: :destroy # 2

解决这个问题的一种方法是给关联添加前缀:

has_many :hotel_partnerships, through: :hotels, source: :partnerships, dependent: :destroy
has_many :office_partnerships, through: :offices, source: :partnerships, dependent: :destroy