2011-09-03 69 views
0

我使用的軌道,我試圖找出如何使用ActiveRecord的方法中,以下列組合成一個查詢:Rails的ActiveRecord的加入

def children_active(segment) 
    parent_id = Category.select('id').where('segment' => segment) 
    Category.where('parent_id'=>parent_id, 'active' => true) 
end 

基本上,我試圖讓子類由稱爲段的唯一列指定的類別。現在,我在第一個查詢中獲取類別的id,然後在第二個查詢中將該值用於parent_id。我一直在試圖弄清楚如何使用AR來完成一個連接,以便在一個查詢中完成。

回答

1

您可以使用自連接用別名表名:

Category.joins("LEFT OUTER JOIN categories AS segment_categories on segment_categories.id = categories.parent_id").where("segment_categories.segment = ?", segment).where("categories.active = ?", true) 

這可能看起來不是很爽,但它可以在同一行實現查詢,並且會有比你的解決方案的性能損失要少得多當數據收集很大時,因爲「INCLUDE IN」比「JOIN」慢得多。

+0

非常感謝。這工作得很好。 – Frank

+0

不客氣。 –