2016-08-19 69 views
1

有沒有獲取Active Relation查詢中包含的所有對象的方法? 事情是這樣的:獲取集合中包含的所有Active Record對象

def index 
    @items = Item.all.includes(:comments) 
    @comments = @items.comments // No such method for AR Collection :(
end 

最明顯的方式來獲得在這種情況下,所有的項目是:

@comments = @items.map(&:comments).flatten.uniq 

由於使用.includes(:comments)應該沒有N + 1個查詢,但我擔心此代碼的性能。是否有任何內置或更有效的方法來獲取所有收錄記錄?

+3

你爲什麼要在一個單獨的對象'@ comments'所有評論?你打算如何準確使用它? – Surya

+1

這實際上取決於你打算用'@ comments'做什麼 - 你需要以特定的順序嗎? – max

回答

0

您可以要求這樣的評論:

@comments = Comment.where(item_id: Item.pluck(:id)) 
+2

如果只關心它附加到一個Item,你可以在一個帶有@comments = Comment.where.not(item_id:nil)的查詢中做同樣的事情。 – max

+0

我不會推薦這個。你執行兩個查詢,你可以很容易地做一個 –

+1

但你會得到ActiveRecord集合,而不是純數組,就像問題的例子 – gambala

相關問題