Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 显示一个activerecord对象的多个副本_Ruby On Rails_Ruby_Activerecord_Pg - Fatal编程技术网

Ruby on rails 显示一个activerecord对象的多个副本

Ruby on rails 显示一个activerecord对象的多个副本,ruby-on-rails,ruby,activerecord,pg,Ruby On Rails,Ruby,Activerecord,Pg,我正在显示文章列表,并使用will_paginate gem和无休止的滚动。这一切都很好 然而,我的问题是,我偶尔会在视图中看到同一篇文章的多个副本。这并不是一直都会发生,也不是每一篇文章都会发生,但已经足够让人讨厌了 我知道数据库中没有重复项,所以渲染时会出现问题 这是我的控制器: @articles = Article.order("date_published DESC", "RANDOM()").paginate(:page => params[:page],:per_page =

我正在显示文章列表,并使用will_paginate gem和无休止的滚动。这一切都很好

然而,我的问题是,我偶尔会在视图中看到同一篇文章的多个副本。这并不是一直都会发生,也不是每一篇文章都会发生,但已经足够让人讨厌了

我知道数据库中没有重复项,所以渲染时会出现问题

这是我的控制器:

@articles = Article.order("date_published DESC", "RANDOM()").paginate(:page => params[:page],:per_page => 10)  
我试图以某种方式包括distinct或uniq方法,但似乎我不能将两者都用于order方法

我用pg来表示db


任何帮助都将不胜感激

您的子排序出现问题,
RANDOM()

假设我有这些帖子:

id  published  title
----------------------
 1  1/1/1970   One
 2  1/2/1970   Two
 3  1/2/1970   Three
 4  1/3/1970   Four
如果我请求第一页(页面大小为2),我可以得到4和3,或者4和2。现在,如果我请求第2页,我可以得到3和1或者2和1。这是因为
RANDOM()
子排序。第一个查询可能会从此结果中提取页面:

id  published  title
----------------------
 4  1/3/1970   Four
 3  1/2/1970   Three
 2  1/2/1970   Two
 1  1/1/1970   One
这是4和3,但这个结果也是可能的:

id  published  title
----------------------
 4  1/3/1970   Four
 2  1/2/1970   Two
 3  1/2/1970   Three
 1  1/1/1970   One
这是4和2。这两个结果中的任何一个也会产生不同的第2页。这种随机排序是产生重复项的原因,您需要使用一致排序或以其他方式管理重复项的删除。例如:

@articles = Article.where.not(id: list_of_already_fetched_ids).order("date_published DESC", "RANDOM()").paginate(:page => params[:page],:per_page => 10)

注意:
where.not
在Rails 4中可用,如果您不使用Rails 4,您需要找到另一种方法来实现该过滤器。

停止对它们进行随机化?是的,这很有效。谢谢我没有意识到随机排序有这种效果。看看我的答案,当你执行这样的任务时,你应该真正考虑你的代码将要做什么。这将对结果产生什么影响。你为什么一开始就按“RANDOM()”排序?我按日期排序,然后每天随机排序。谢谢你的回复。