2016-04-07 40 views
-1
# engine.rb 
has_many :pistons 

#piston.rb 
belongs_to :engine 

活塞有一欄,piston_count,當然,engine_id查詢的has_many關係,包含了這一點,也該

我的數據庫具有以下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_count1還包含piston_count2

我試過... engines = Engine.joins(:pistons).merge(Piston.where(piston_count:1)) #=> [#,#] engines.joins(:pistons)。 merge(Piston.where(piston_count:2)) #=> []

它返回一個空數組,因爲活動記錄將其轉換爲一個AND子句。但是,如果我執行OR語句,它將返回太多記錄。有什麼想法嗎?

回答

0

想通了。這取得了兩個活動記錄查詢的相交點。

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) 
相關問題