6

我在分页调用中收到重复的条目。

代码如下:

@reviews = @user.reviews.paginate(:page => params[:page], :per_page => 5)

当我在终端中运行它时,它会返回重复的条目。这是一个例子:

第 1 页:

1.9.3p327 :040 > me.reviews.paginate(:page => 1, :per_page => 5)
  Review Load (2.1ms)  SELECT "reviews".* FROM "reviews" WHERE "reviews"."user_id" = 43 ORDER BY rating DESC LIMIT 5 OFFSET 0
   (1.0ms)  SELECT COUNT(*) FROM "reviews" WHERE "reviews"."user_id" = 43
 => [#<Review id: 319>, #<Review id: 322>, #<Review id: 318>, #<Review id: 323>, #<Review id: 313>] 

第2页:

1.9.3p327 :045 > me.reviews.paginate(:page => 2, :per_page => 5)
  Review Load (1.3ms)  SELECT "reviews".* FROM "reviews" WHERE "reviews"."user_id" = 43 ORDER BY rating DESC LIMIT 5 OFFSET 5
   (0.7ms)  SELECT COUNT(*) FROM "reviews" WHERE "reviews"."user_id" = 43
 => [#<Review id: 313>, #<Review id: 324>, #<Review id: 315>, #<Review id: 310>, #<Review id: 312>] 

请注意,评论 #313 两次都发生。

但是,当我运行 me.reviews 时,每个 id 只出现一次。

我整天都在为此工作,因此可以快速响应更新您可能需要的任何信息。我很困惑。

4

1 回答 1

14

您的评论中有重复的评分(例如:4、4、4、4、3、3、3、3 等)。在平局的情况下,不能保证 2 个不同查询的结果排序相同。您可以通过在 上添加辅助排序来解决此问题id。这将保证整个查询的排序顺序,并且您不会在不同的页面上有重复:

me.reviews.order(:rating, :id).paginate(...)
于 2013-03-26T02:27:35.667 回答