繁体   English   中英

如何在Rails中通过HABTM查询belongs_to

[英]How do I query belongs_to through a HABTM in Rails

我正在尝试了解查询基本HABTM关系的最佳方法。 我想按相关学科找到所有种族。 由于我中间有一个HABTM关系,因此我对执行此操作的最佳方法感到困惑。

class Discipline < ActiveRecord::Base
  has_many :event_types
end

class EventType < ActiveRecord::Base
  belongs_to :discipline
  has_and_belongs_to_many :races
end

class Race < ActiveRecord::Base 
  has_and_belongs_to_many :event_types
end

谢谢。

您可以对加入event_types的种族进行查询,并使用where仅包括纪律编号正确的条目。

Race.joins(:event_types).where('event_types.discipline_id = ?', discipline.id)

假设您已将学科加载到变量discipline ……如果您将学科存储在实例变量@discipline则相应地更改查询的结尾。

也许可以这样定义它:

class Discipline < ActiveRecord::Base
  has_many :event_types
  has_many :races, through: :event_types

然后只需致电discipline.races

我认为,如果没有,这应该起作用:

discipline.event_types.includes(:races).map { |e| e.races }.flatten

map返回一个新的Array,其中包含每个结果的块结果,因此每个事件的竞赛。 flatten使嵌套数组(每个事件类型的竞赛数组)中的一个变为平坦(竞赛)。 也许您也想在此上调用uniq 并且includes渴望一次加载所有种族,而不是每个事件类型一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM