我试图以随机顺序显示一系列照片,同时对它们进行分页。麻烦的是,在分页的每一页上重新生成随机数组;因此,用户可以在第2页上看到他已在第1页上看到的照片。这是我的控制器:
def index
@photos = Photo.order('random()').paginate(:per_page => 12, :page => params[:page])
end
我已经考虑了一段时间,想不出任何合理的解决方案。这很容易吗?这似乎是一个非常常见的功能,但我可能不得不抛弃随机的东西。想法?
答案 0 :(得分:1)
您可以通过指定种子来为随机性引入一些顺序性。使用它,后续调用将为您提供可重复的排序。
每个数据库都提供了一种指定种子值的不同方法。例如,在MySQL中,
@photos = Photo.order('rand(0.5)').paginate(:per_page => 12, :page => params[:page])
这里0.5是rand()
函数的种子。
同样,Postgres具有setseed()
功能。我不确定你使用的是什么数据库。无论如何,我希望你能得到这个想法。