在分页时Rails随机调用ActiveRecord

时间:2011-09-13 00:02:16

标签: ruby-on-rails-3 random pagination

我试图以随机顺序显示一系列照片,同时对它们进行分页。麻烦的是,在分页的每一页上重新生成随机数组;因此,用户可以在第2页上看到他已在第1页上看到的照片。这是我的控制器:

def index
  @photos = Photo.order('random()').paginate(:per_page => 12, :page => params[:page])
end

我已经考虑了一段时间,想不出任何合理的解决方案。这很容易吗?这似乎是一个非常常见的功能,但我可能不得不抛弃随机的东西。想法?

1 个答案:

答案 0 :(得分:1)

您可以通过指定种子来为随机性引入一些顺序性。使用它,后续调用将为您提供可重复的排序。

每个数据库都提供了一种指定种子值的不同方法。例如,在MySQL中,

@photos = Photo.order('rand(0.5)').paginate(:per_page => 12, :page => params[:page])

这里0.5是rand()函数的种子。

同样,Postgres具有setseed()功能。我不确定你使用的是什么数据库。无论如何,我希望你能得到这个想法。