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!!