ruby rails - 从一组外键中获取对象的集合

时间:2012-01-08 15:30:33

标签: sql ruby activerecord ruby-on-rails-3.1

我很想/希望...我有一个查询返回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列表引用的users表中提取用户集合(按相同顺序)?

谢谢!

4 个答案:

答案 0 :(得分:1)

怎么样:

users = @results.collect(&:user)

答案 1 :(得分:1)

您有两种保留订单的选项。首先 - 急切地在原始查询中加载用户。在这种情况下

users = @results.map(&:user)

第二 - 重新订购红宝石面

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

答案 2 :(得分:0)

HeJ小鼠, 首先,您需要准备user_ids数组。它应该看起来像这样[209,902,...,890](你可以使用map或collect方法来做到这一点)然后只需构建sql查询:

User.where(:id=>user_ids)

其中user_ids已准备好数组

答案 3 :(得分:0)

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