我注意到分页宝石之类mislav-will_paginate
的非常受欢迎。这是因为 Rails 没有内置的分页解决方案,还是因为内置的解决方案不是很好?
4 回答
在 Rails 2.0 中,ActionController 的分页功能被删除并变成了一个名为“classic_pagination”的向后兼容插件。然而,从我为自己寻找分页解决方案来看,共识似乎是使用“classic_pagination”并不是最优的。
在看了几个播客和几个建议之后,我选择尝试will_paginate插件并且没有回头。它快速、易于使用且维护良好。
我相信即使是 Searchlogic V2 也推荐使用它。
如果您使用的是 Rails 3 Kaminari 插件,那么分页将非常方便。 Github Railscasts
Rails 有内置的分页,但它是一个简单的模块,并不适合所有需求。除非您有特定的分页需求,否则它应该适合大多数用途。
我会推荐searchlogic。它内置了分页和许多其他不错的东西。
- 轻松过滤
- 分页
- 排序
而且.. 对于所有这些好帮手。
代码说了一千多个单词(不要对 HAML 示例感到困惑,如果您愿意,可以使用普通的 erb 模板,代码/结构是相同的):
控制器:
def index
@search = User.new_search(params[:search])
@users, @users_count = @search.all, @search.count
end
视图中的分页内容:
== Per page: #{per_page_select}
== Page: #{page_select}
在视图中排序为/按:
- unless @users_count.zero?
%table
%tr
%th= order_by_link :account => :name
%th= order_by_link :first_name
%th= order_by_link :last_name
%th= order_by_link :email
- @users.each do |user|
%tr
%td= user.account? ? user.account.name : "-"
%td= user.first_name
%td= user.last_name
%td= user.email
简单、简单、快速的过滤器:
- form_for @search do |f|
- f.fields_for @search.conditions do |users|
= users.text_field :first_name_contains
= users.date_select :created_after
- users.fields_for users.object.orders do |orders|
= orders.select :total_gt, (1..100)
= f.submit "Search"
一切都可以一起工作,因此更改页面然后排序,添加过滤器不会丢失任何其他设置:)。
您所需要的只是在您的 environment.rb 中:
config.gem "searchlogic"
并安装它:rake gems:install
另请查看在线示例