[英]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.