Rails,使用时获取随机记录:group

时间:2009-07-30 11:54:44

标签: ruby-on-rails

使用时如何获取随机记录:group?

@paintings = Painting.all(:group => "user_id", :order => "created_at DESC")

这给了我每个用户的最新画作。现在我想从每个用户中选择一个随机绘画,而不是最新的。绘画的顺序应该仍然相同,以便最活跃的用户将首先显示他/她的随机绘画。

painting150(user1)
painting200(user2)
painting231(user3)

这可能吗?

祝你好运。 AsbjørnMorell。

4 个答案:

答案 0 :(得分:1)

这个答案特定于Rails,但由于你使用的是ActiveRecord,我认为应该没问题。

unique_paintings = []
@paintings.group_by(&:user_id).each do |user_id, paintings|
  unique_paintings << paintings[rand(paintings.size-1)]
end

unique_paintings.sort_by(&:created_at) 

group_by肯定会弄乱你在查询中所做的created_at排序,所以我做了一个sort_by作为最后一步。您可能希望在查询中删除它,因为无论如何您都必须这样做。

答案 1 :(得分:0)

@painting = @paintings[rand(@paintings.size-1)]

(或painting.count,还不知道正确的方法)

答案 2 :(得分:0)

假设你有MySQL,你可以尝试:

@paintings = Painting.all(:group => "user_id", :order => "RAND()")

答案 3 :(得分:0)

你可以做这样的事情,但随着记录数量的增长会受到影响

@paintings = Painting.find(:all, :order => 'RAND()').map{ |i| i.user_id }.uniq