2013-03-25 52 views
2

我在分頁調用中獲取重複條目。rails分頁複製條目

的代碼如下:

@reviews = @ user.reviews.paginate(:頁=> PARAMS [:頁],: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只出現一次。

我一直在這一整天都在努力工作,因此可以快速響應以更新您可能需要的任何信息。我很困惑。

回答

9

您在評論中重複的評分(例如:4,4,4,4,3,3,3,3等)。在關係情況下,結果不能保證對2個不同的查詢命令相同。您可以通過在id上添加輔助排序來解決此問題。這將保證整個查詢的排序順序,並且您不會在不同頁面上有重複項目:

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

您改變了我的生活。謝謝。我看着它,我的評論模型是命令「評級DESC」。我爲此添加了'id',現在一切都在流動。還有一個後續問題:我不明白爲什麼有重複。我明白爲什麼會有UNORDERED參賽作品,因爲有些評分是平等的,但爲什麼重複呢? – Laurent 2013-03-26 03:10:49

+1

這可能取決於您使用的數據庫的類型。我已經看到了Postgres的LIMIT&OFFSET,這是will_paginate的功能。你正在做2個單獨的查詢。數據庫不保證在兩個查詢中關係都是相同的。因此,在上面的示例中,第一次在第二次運行查詢&位置6(頁面2)時,評級爲3的評論可能位於位置5(頁面1)。 – tee 2013-03-26 03:30:22

+0

謝謝。我一直在這裏持續12個小時。這總是一個簡單的解決辦法,但到達那裏需要一些經驗,你明確擁有它。謝謝。 – Laurent 2013-03-26 04:53:48