Ruby
Rails
kaminari

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

More than 5 years have passed since last update.


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が便利