will_paginate生成错误数量的页面链接

时间:2011-10-29 15:12:09

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

我正在使用将分页3.0.2和Rails 3.1.0。

以下代码存在于我的控制器中。

  @users = User.visible_for(current_user).
           includes(:study_courses).
           ordered_by_last_name.
           page(params[:page]).per_page(20)

在部分@users已从上方分配了users的情况下,我执行了以下操作:

= will_paginate users, previous_label: h("<"), next_label: h(">") 

如果有20个用户,它会给我6个页面链接,其中第一个页面包含20个用户,第二个页面包含10个用户,当然其余页面包含零个用户。

我无法弄清楚为什么有6个页面链接而不是3个。

更新: 想通了,will_paginate不使用distinct来计算记录。任何想法如何做到这一点?

3 个答案:

答案 0 :(得分:9)

好的,我自己找到了一个解决方案:

  user_count = User.visible_for(current_user).count(distinct: true)
  @users = User.visible_for(current_user).
                includes(:study_courses).
                ordered_by_last_name.
                paginate(page: params[:page],
                         per_page: 20,
                         total_entries: user_count)

在我的范围内,我使用了disctinct,但在关系上调用count似乎会覆盖它。因此,必须手动计数并将计数传递给paginate方法。

答案 1 :(得分:1)

这种方式看起来更干净:https://stackoverflow.com/a/10740732/2599681

我尝试了它并且与Rails 3.2.11和WillPaginate 3.0.4很好地配合使用。

问候!

答案 2 :(得分:0)

就我而言,.count也提供错误的号码。因为.count运行SQL whitch包括&#34; distinct&#34;。我将其更改为.length并且工作正常。

喜欢这个

user_count = User.some_scopes.length
@users     = User.some_scopes.paginate(page: params[:page],
                                       per_page: 20,
                                       total_entries: user_count)