如何通过has_many通过关联获取嵌套记录?

什皮福德
class Manager < ApplicationRecord
  has_many :bands
end

class Band < ApplicationRecord
  belongs_to :manager
  has_many :member_bands
  has_many :members, through: :member_bands
end

class Member < ApplicationRecord
  has_many :member_bands
  has_many :bands, through: :member_bands
end

class MemberBand < ApplicationRecord
  belongs_to :member
  belongs_to :band
end

我最终想要做的就是让给定的经理获得所有成员。

我觉得我需要做一些连接,但是很难确定。

我已经尝试过,manager.bands.joins(:members)但是我只有多个bands成员,而没有成员。

我现在正在与多个循环一起破解:

manager.bands.each do |band|
  band.members.each do |member|
    ##
  end
end

那么,如何获取members与给定manager(通过进行连接的人bands)的所有关联

明德利斯

根据您的关联,您应该可以添加

has_many :members, through: :bands

给您的经理。

irb(main):003:0> Manager.first.members
  Manager Load (0.2ms)  SELECT  "managers".* FROM "managers" ORDER BY "managers"."id" ASC LIMIT $1  [["LIMIT", 1]]
  Member Load (0.6ms)  SELECT  "members".* FROM "members" INNER JOIN "member_bands" ON "members"."id" = "member_bands"."member_id" INNER JOIN "bands" ON "member_bands"."band_id" = "bands"."id" WHERE "bands"."manager_id" = $1 LIMIT $2  [["manager_id", 1], ["LIMIT", 11]]
=> #<ActiveRecord::Associations::CollectionProxy [#<Member id: 1>, #<Member id: 2>, #<Member id: 3>, #<Member id: 5>, #<Member id: 6>, #<Member id: 7>]>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章