ruby rails - получение коллекции объектов из коллекции внешних ключей

Легко, я думаю / надеюсь... У меня есть запрос, который возвращает список из 20 уникальных внешних ключей:

@results   = Report.select("distinct user_id").where("datetime_utc >= ? AND datetime_utc <= ?",@utc_time_slot , @utc_time_slot_end).order("score DESC, quality DESC").limit(20)  

это возвращает массив (класс ActiveRecord::Relation):

[#<Report user_id: 803>, #<Report user_id: 809>, #<Report user_id: 806>, #<Report user_id: 801>, #<Report user_id: 830>, #<Report user_id: 860>, #<Report user_id: 858>, #<Report user_id: 856>, #<Report user_id: 854>, #<Report user_id: 852>, #<Report user_id: 851>, #<Report user_id: 850>, #<Report user_id: 849>, #<Report user_id: 846>, #<Report user_id: 859>, #<Report user_id: 866>, #<Report user_id: 2022>, #<Report user_id: 863>, #<Report user_id: 862>, #<Report user_id: 838>]

Что мне нужно сделать с этим массивом @results, чтобы извлечь коллекцию пользователей из таблицы пользователей, на которую ссылается список user_id (в том же порядке)?

Спасибо!

4 ответа

Решение

У вас есть два варианта сохранения заказа. Во-первых - загружать пользователей в исходный запрос. В этом случае

users = @results.map(&:user)

Второе - переупорядочить на рубиновой стороне

idx = User.find(@results.map(&:user_id)).index_by(&:id)
users = @result.map{|r| idx[r.use_id]}

Как насчет:

users = @results.collect(&:user)

Хей, в первую очередь нужно подготовить массив user_ids. он должен выглядеть следующим образом [209, 902, ..., 890] (для этого можно использовать метод map или collect), а затем просто построить запрос sql следующим образом:

User.where(:id=>user_ids)

где user_ids подготовлен массив

User.find(@results.map(&:user_id))

Другие вопросы по тегам