我对通过关联的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
然后我有一个合作伙伴关系表,这是酒店和办公室之间的联接表,因此酒店和办公室都有许多合作关系:
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(@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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句