2016-08-19 86 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

相关问题