Rails有内置的分页解决方案吗?

时间:2009-06-08 21:45:40

标签: ruby-on-rails pagination

我注意到像mislav-will_paginate这样的分页宝石很受欢迎。这是因为Rails没有内置的分页解决方案,还是因为内置的解决方案不是很好?

4 个答案:

答案 0 :(得分:28)

在Rails 2.0中,ActionController的分页功能被删除,并变成了一个名为'classic_pagination'的向后兼容插件。但是,从我为自己搜索分页解决方案来看,共识似乎是使用'classic_pagination'并不是最佳选择。

在观看了几个播客之后,经过多次推荐后,我选择尝试使用will_paginate插件并且没有回头看。它快速,易于使用且维护良好。

我相信即使是Searchlogic的V2也建议使用它。

答案 1 :(得分:15)

如果您使用Rails 3,Kaminari插件将非常方便分页。 Github Railscasts

答案 2 :(得分:8)

Rails具有内置分页功能,但它是一个简单的模块,并不适合所有需求。除非你有特定的分页需求,否则它应该适合大多数目的。

Here's a good article on how to use Rails pagination

答案 3 :(得分:3)

我建议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"

一切都在一起工作,所以更改页面然后排序,添加过滤器可以在不丢失任何其他设置的情况下工作:)。

您需要的只是在您的环境中.rb:

config.gem "searchlogic"

并使用以下内容进行安装:rake gems:install

同时结帐online example