如何为每个用户选择一个随机记录,但按最新记录pr.user排序数组。
如果Foo上传了一幅新的画作,我想从Foo中选择一条随机记录。这样,一个上传10幅画的用户不会独占首页的所有空间,但仍然可以在页面顶部获得一个位置。
这就是我在MySQL上运行Rails 2.x的方式。

@paintings = Painting.all.reverse
first_paintings = []
@paintings.group_by(&:user_id).each do |user_id, paintings|
  first_paintings << paintings[rand(paintings.size-1)]
end
@paintings = (first_paintings + (Painting.all - first_paintings).reverse).paginate(:per_page => 9, :page => params[:page])

上面的例子生成了大量的SQL查询,并且优化得很差。如果在PostgreSQL上运行Rails 3.1,您将如何实现这一点?我有7000张唱片。。

最佳答案

@paintings = Painting.all.reverse=@paintings = Painting.order("id desc")
若你们真的想颠倒绘画结果集的顺序,我会设置一个范围,然后就用那个
有点像

class Painting < ActiveRecord::Base
  scope :reversed, order("id desc")
end

然后你可以在任何需要的地方使用Painting.reversed

关于ruby-on-rails - 帮助将Rails 2数据库逻辑转换为Rails 3.1/PostgreSQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6976060/

10-11 01:59