簡體   English   中英

查詢 has_many 關系,包含 this 和 this

[英]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_count1並且活塞piston_count2

我試過... 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM