[英]Query has_many relationship, contains this and also this
# engine.rb
has_many :pistons
#piston.rb
belongs_to :engine
活塞有一個列,活塞piston_count
,當然還有engine_id
我的數據庫有以下 7 條記錄
Engine.all
#=> [#<Engine id: 1>, #<Engine id: 2>, #<Engine id: 3>]
Piston.all
#=> [#<Piston id: 1, engine_id: 1, piston_count: 1>, #<Piston id: 2, engine_id: 1, piston_count: 2>, #<Piston id: 2, engine_id: 2, piston_count: 1>, #<Piston id: 2, engine_id: 3, piston_count: 2>]
我想寫一個查詢,返回包含活塞的Engine
,活塞piston_count
為1
並且活塞piston_count
為2
我試過... engine = Engine.joins(:pistons).merge(Piston.where(piston_count: 1)) #=> [#, #]engine.joins(:pistons).merge(Piston.where(活塞計數:2)) #=> []
它返回一個空數組,因為活動記錄將其轉換為一個 AND 子句。 但是,如果我執行 OR 語句,它將返回太多記錄。 有什么想法嗎?
弄清楚了。 這需要兩個 Active Record 查詢的交集。
engine_ids = Engine.joins(:pistons).merge(Piston.where(piston_count: 1)).pluck(:id) & Engine.joins(:pistons).merge(Piston.where(piston_count: 2)).pluck(:id)
然后返回並檢索所有相交。
Engine.where(id: engine_ids)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.