Module: Kaminari::ActionViewExtension

Defined in:
lib/kaminari/helpers/action_view_extension.rb

Overview

Helpers

Instance Method Summary collapse

Instance Method Details

A simple “Twitter like” pagination link that creates a link to the next page.

Examples

Basic usage:

<%= link_to_next_page @items, 'Next Page' %>

Ajax:

<%= link_to_next_page @items, 'Next Page', :remote => true %>

By default, it renders nothing if there are no more results on the next page. You can customize this output by passing a block.

<%= link_to_next_page @users, 'Next Page' do %>
  <span>No More Pages</span>
<% end %>
[View source]

39
40
41
42
43
44
45
# File 'lib/kaminari/helpers/action_view_extension.rb', line 39

def link_to_next_page(scope, name, options = {}, &block)
  params = options.delete(:params) || {}
  param_name = options.delete(:param_name) || Kaminari.config.param_name
  link_to_unless scope.last_page?, name, params.merge(param_name => (scope.current_page + 1)), options.reverse_merge(:rel => 'next') do
    block.call if block
  end
end

#page_entries_info(collection, options = {}) ⇒ Object

Renders a helpful message with numbers of displayed vs. total entries. Ported from mislav/will_paginate

Examples

Basic usage:

<%= page_entries_info @posts %>
#-> Displaying posts 6 - 10 of 26 in total

By default, the message will use the humanized class name of objects in collection: for instance, “project types” for ProjectType models. Override this with the :entry_name parameter:

<%= page_entries_info @posts, :entry_name => 'item' %>
#-> Displaying items 6 - 10 of 26 in total
[View source]

62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/kaminari/helpers/action_view_extension.rb', line 62

def page_entries_info(collection, options = {})
  entry_name = options[:entry_name] || (collection.empty?? 'entry' : collection.first.class.name.underscore.sub('_', ' '))
  if collection.num_pages < 2
    case collection.total_count
    when 0; "No #{entry_name.pluralize} found"
    when 1; "Displaying <b>1</b> #{entry_name}"
    else;   "Displaying <b>all #{collection.total_count}</b> #{entry_name.pluralize}"
    end
  else
    offset = (collection.current_page - 1) * collection.limit_value
    %{Displaying #{entry_name.pluralize} <b>%d&nbsp;-&nbsp;%d</b> of <b>%d</b> in total} % [
      offset + 1,
      offset + collection.count,
      collection.total_count
    ]
  end
end

#paginate(scope, options = {}, &block) ⇒ Object

A helper that renders the pagination links.

<%= paginate @articles %>

Options

  • :window - The “inner window” size (4 by default).

  • :outer_window - The “outer window” size (0 by default).

  • :left - The “left outer window” size (0 by default).

  • :right - The “right outer window” size (0 by default).

  • :params - url_for parameters for the links (:controller, :action, etc.)

  • :param_name - parameter name for page number in the links (:page by default)

  • :remote - Ajax? (false by default)

  • :ANY_OTHER_VALUES - Any other hash key & values would be directly passed into each tag as :locals value.

[View source]

17
18
19
20
# File 'lib/kaminari/helpers/action_view_extension.rb', line 17

def paginate(scope, options = {}, &block)
  paginator = Kaminari::Helpers::Paginator.new self, options.reverse_merge(:current_page => scope.current_page, :num_pages => scope.num_pages, :per_page => scope.limit_value, :param_name => Kaminari.config.param_name, :remote => false)
  paginator.to_s
end