我正在尝试显示按日排序的文章列表,但每天都会随机显示。
这就是我现在所拥有的:
@articles = Article.all.shuffle.sort_by{|t| t.date_published}.reverse
我当时认为排序会发生在洗牌阵列上,但似乎并没有发生这种情况。任何帮助将不胜感激!
我尝试过group_by似乎无法让它发挥作用。
答案 0 :(得分:3)
首先对您的代码有一点了解:all
将从数据库中获取所有记录并将其传递给您的ruby代码,这是资源和时间消耗。然后,shuffle
,sort_by
和reverse
全部由ruby执行。随着数据库的增长,您将很快遇到性能问题。
您的解决方案是让数据库服务器完成这项工作。数据库服务器针对所有排序操作进行了优化。因此,如果你使用MySQL,你应该使用它:
@articles = Article.order('`articles`.`date_published` DESC, RAND()')
主要按相反顺序的date_published排序,其次是同一日期的所有文章随机排序
答案 1 :(得分:0)
嗯,这是 工作的有趣黑客:
@articles = Article.
all.
sort_by{|t| (t.date_published.beginning_of_day.to_i * 1000) + rand(100)}
这可以通过强制所有日期成为当天的开始(例如,'2015-02-19'上发布的所有内容都具有相同的to_i
值。然后乘以1000并添加排序的0到100之间的随机数(任何小于1000的数字都可以)。