Konboi Note

kaminari を使って配列に対してのページャーを作成する

この記事はQiitaの記事をエクスポートしたものです。内容が古くなっている可能性があります。

kaminari とは

kaminariは Rails でページャを作成する際に、コードを数行追加するだけで簡単にページャーが作成できる非常に便利な gem です。

kaminari の使い方

kaminari の使い方は github の README を読めばなんとなく理解できると思いますが、簡単に説明したいと思います。

インストール

# Gemfile

gem 'kaminari'
bundle install --path ./vendor/bundler

これで使う準備は OK です。
次にページャーを使用したいモデルに設定を追加します。
今回はサンプルとして User モデルを使用したいと思います。

ユーザーモデルに下記を追加します。

# app/models/user.rb

default_scope :order => 'created_at DESC'
paginates_per 4

これは、kaiminari をとして User を 4 つずつ新しい順に取得するというものです。

そして、このページャーを使用したいページの Controller 部分に下記を追加します。
サンプルとして home_controller とします。

# app/controllers/home_controller.rb

def index
  @user = User.page params[:page]
end
# app/views/home/index.html.erb

<% @user.each  do |user| %>
<p> <%= user.name %></p>
<% end %>

%= paginate @user %>

これでページャー付きの画面ができたと思います。

ここまでは普通の kaminari の使い方だと思います。

配列に対して kaminari を使用する

耐えば controller 側で下記のような配列を作成したとします。
( あくまでサンプルなので。 いい例が思いつかなかった..orz)

# app/controllers/home_controller.rb

@array = []
users = User.all
users.each do |user|
  array.push({
      name: user.name,
      foo: user.hoge.first.foo
  })
end

このとき @array に対してページャを実装しようとしたら結構面倒くさいと思います。
が、kaminari の paginate_array メソッドを使用したら綺麗に記述できました。

array = []
users = User.all
users.each do |user|
  array.push({
      name: user.name,
      foo: user.hoge.first.foo
  })
end

@hoge = Kaminari.paginate_array(array).page(params[:page]).per(4)

<%= paginate @hoge %>

こうすることで array オブジェクトに対して簡単にページャーを実装することができます。

すごい kaminari!!

参考リンク

それは Blog:kaminari の page_array が便利