rails paginate重复条目

Lau*_*ent 4 pagination ruby-on-rails will-paginate ruby-on-rails-3

我在分页调用中得到重复的条目.

代码如下:

@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>] 
Run Code Online (Sandbox Code Playgroud)

第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>] 
Run Code Online (Sandbox Code Playgroud)

请注意,审核#313同时发生.

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

我一整天都在努力,所以可以快速回复更新您可能需要的任何信息.我很困惑.

tee*_*tee 11

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

me.reviews.order(:rating, :id).paginate(...)
Run Code Online (Sandbox Code Playgroud)

  • 这可能取决于您使用的数据库类型。我已经在 Postgres 中看到了这个,带有 LIMIT &amp; OFFSET,这就是 will_paginate 所做的。您正在执行 2 个单独的查询。数据库不保证两个查询中关系的顺序相同。因此,在我上面的示例中,评级为 3 的评论可能在您第一次运行查询时位于第 5 页(第 1 页),而第二次位于第 6 页(第 2 页)。 (2认同)