Kaminari

Una exelente alternativa para implementar paginacion en rails es Kaminari. ofrece mas opciones que la otra que conocemos, will_paginate.

Support Versions

Ruby 1.8.7, 1.9.2, 1.9.3, 2.0.0, 2.1.1

Rails 3.0, 3.1, 3.2, 4.0, 4.1

Haml 3+

Vamos a incorporarla en nuestro book_town, en general, kaminari es:

  • facil de usar
  • personalizable
  • potente
  • limpia -

1. en primer lugar agregamos la gema a nuestro gemfile gem 'kaminari' hacemos bundle install

2. Kaminari nos crea un scope, llamado 'page', este scope puede usarse en cualquier modelo activerecord, en nuestro caso, se agrega a la accion index del booksController para que nos muestre la paginacion de libros

3. en la vista index Colocamos el helper que crea kaminari que se llama paginate y le 'pasamos' lo que queremos que pagine en este caso @books

Podemos definir cuantos items o libros queremos que se muestren por pagina, agregando per(#) al final de nuestra query o lo que sea User.page(params[:page]).per(50)

Hay muchas maneras de configurar nuestra paginacion, ejemplo la que vimos del .per(#) Tambien podemos generar el archivo de configuracion de kaminari con rails g kaminari:config despues de haberlo generado nos ubicamos en la carpeta config/initalizers/kaminari_config.rb y ahi modificar las variables Kaminari trae una configuracion por defecto.

  • default_per_page # 25 by default
  • max_per_page # nil by default
  • max_pages # nil by default
  • window # 4 by default
  • outer_window # 0 by default
  • left # 0 by default
  • right # 0 by default
  • page_method_name # :page by default
  • param_name # :page by default

el per_page tambien lo podemos modificar para cada modelo ejemplo: nos ubicamos en el modelo y definimos paginates_per 50 o el max_paginates_per 30 tambien se puede agregar por cada modelo que querramos paginar tambien podemos hacerlo en el controlador, como vimos al principio (duh)

helper method ejemplo: = paginate @users, :param_name => :pagina = paginate @users, :window => 2

personalizar la vista por medio del en.yml

en: views: pagination: first: "« First" last: "Last »" previous: "‹ Prev" next: "Next ›" truncate: "…" helpers: page_entries_info: one_page: display_entries: zero: "No %{entry_name} found" one: "Displaying 1 %{entry_name}" other: "Displaying all %{count} %{entry_name}" more_pages: display_entries: "Displaying %{entry_name} %{first} - %{last} of %{total} in total"

tambien se puede customizar rails g kaminari:views default rails g kaminari:views default -e haml