使用will_paginate通过随机列出的博客文章进行分页

Tom*_*man 5 random ruby-on-rails will-paginate

我想让用户能够以随机顺序浏览我的博客帖子.

我无法像这样实现它:

@posts = Post.paginate :page => params[:page], :order => 'RANDOM()'
Run Code Online (Sandbox Code Playgroud)

因为:order每个查询都会调用该参数,因此我冒着重复博客帖子的风险.

最好的方法是什么?

Tob*_*ede 3

RAND 接受 MySQL 中的种子:

RAND(N) 
Run Code Online (Sandbox Code Playgroud)

来自MySQL 文档

兰德(), 兰德(N)

返回 0 <= v < 1.0 范围内的随机浮点值 v。如果指定了常量整数参数 N,则将其用作种子值,从而生成可重复的列值序列。在下面的示例中,请注意 RAND(3) 生成的值序列在其出现的两个位置都是相同的。

其他数据库应该有类似的功能。

如果您每次调用 RAND 时都使用SAME种子,则请求之间的顺序将保持一致,您可以相应地分页。

然后,您可以将种子存储在用户的会话中 - 这样每个用户都会看到一组他们独有的结果。