Tom*_*man 5 random ruby-on-rails will-paginate
我想让用户能够以随机顺序浏览我的博客帖子.
我无法像这样实现它:
@posts = Post.paginate :page => params[:page], :order => 'RANDOM()'
Run Code Online (Sandbox Code Playgroud)
因为:order每个查询都会调用该参数,因此我冒着重复博客帖子的风险.
最好的方法是什么?
RAND 接受 MySQL 中的种子:
RAND(N)
Run Code Online (Sandbox Code Playgroud)
来自MySQL 文档:
兰德(), 兰德(N)
返回 0 <= v < 1.0 范围内的随机浮点值 v。如果指定了常量整数参数 N,则将其用作种子值,从而生成可重复的列值序列。在下面的示例中,请注意 RAND(3) 生成的值序列在其出现的两个位置都是相同的。
其他数据库应该有类似的功能。
如果您每次调用 RAND 时都使用SAME种子,则请求之间的顺序将保持一致,您可以相应地分页。
然后,您可以将种子存储在用户的会话中 - 这样每个用户都会看到一组他们独有的结果。