我正在使用将分页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来计算记录。任何想法如何做到这一点?
答案 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)