ruby rails - получение коллекции объектов из коллекции внешних ключей - PullRequest
0 голосов
/ 08 января 2012

Легко, я думаю / надеюсь ... У меня есть запрос, который возвращает список из 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 class):

[#<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 ]

1 голос
/ 08 января 2012

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

users = @results.map(&:user)

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

idx = User.find(@results.map(&:user_id)).index_by(&:id)
users = @result.map{|r| idx[r.use_id]}
1 голос
/ 08 января 2012

Как насчет:

users = @results.collect(&:user)
0 голосов
/ 08 января 2012

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

0 голосов
/ 08 января 2012

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

User.where(:id=>user_ids)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...