【问题标题】:rails paginate duplicates entriesrails 分页重复条目
【发布时间】:2013-03-15 10:50:10
【问题描述】:

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

代码如下:

@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 只出现一次。

我整天都在处理这个问题,因此可以快速响应更新您可能需要的任何信息。我很困惑。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 pagination will-paginate


    【解决方案1】:

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

    me.reviews.order(:rating, :id).paginate(...)
    

    【讨论】:

    • 你改变了我的生活。谢谢你。我调查了它,我的评论模型被订购了“评级 DESC”。我在其中添加了“id”,现在一切都在流动。尽管如此,一个后续行动:我不明白为什么会有重复。我明白为什么会有 UNORDERED 条目给出一些相同的评分,但为什么要重复?
    • 这可能取决于您使用的数据库类型。我已经在带有 LIMIT & OFFSET 的 Postgres 中看到了这一点,这就是 will_paginate 所做的。您正在执行 2 个单独的查询。数据库不保证在两个查询中关系的顺序相同。因此,在我上面的示例中,评分为 3 的评论可能在您第一次运行查询时位于第 5 位(第 1 页),而在第二次运行时位于第 6 位(第 2 页)。
    • 谢谢。我已经做了12个小时了。这总是一个简单的解决方法,但要到达那里需要一些经验,而且你显然拥有它。谢谢。
    • 乐于助人。 12 小时 - 听起来是时候休息了!
    • 谢谢!我被类似的问题困扰了一段时间。
    猜你喜欢
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    相关资源
    最近更新 更多