分散洗牌的ActiveRecord查询

neo*_*eon 5 mysql pagination ruby-on-rails ruby-on-rails-3 kaminari

我试图分页一个洗牌的ActiveRecord查询.使用Kaminari gem执行此操作的语法是:

@users = Kaminari.paginate_array(User.all.shuffle).page(params[:page]).per(20)
Run Code Online (Sandbox Code Playgroud)

这个问题是User.all在每个分页请求上重新洗牌,导致重复记录被调用.有没有办法防止这种重复?

Mik*_*iet 5

您需要在查询之间传递rand种子

params[:seed] ||= Random.new_seed
srand params[:seed].to_i
@users = Kaminari.paginate_array(User.all.shuffle).page(params[:page]).per(20)
Run Code Online (Sandbox Code Playgroud)

并在视图中将params [:seed]添加到页面的所有kaminari链接

  • @Mik_Die - 表示我链接到的相同内容:"返回前一个种子值." 当我打开irb并调用`srand`时,第一个调用返回0,因为那是前一个种子值(即:undefined). (2认同)
  • @Matt Huggins,现在我看到你说的话,抱歉..我的答案是正确的 (2认同)