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

Вы можете сделать то же самое в одном запросе с помощью '@comments = Comment.where.not (item_id: nil)', если только заботитесь о том, что он прикреплен к элементу. – max

+0

Я бы не рекомендовал это. Вы выполняете два запроса, где вы можете легко сделать с одним –

+1

Но вы получите коллекцию ActiveRecord вместо чистого массива, как в примере вопроса – gambala

 Смежные вопросы

  • Нет связанных вопросов^_^