はじめに
Railsの勉強としてgem周りを触ってみる企画です。
今回は・・・
を試してみようかと思います。
どういうgemなの?
簡単にいうとページネーション機能を簡単に追加できるgemとのこと。
有名どころなのでしっかり使い方を覚えていきます。
検証環境
以下の環境で実施しました。
[client]
・MacOS Mojave(10.14.2)
・Vagrant 2.2.2
・VBoxManage 6.0.0
[virtual]
・CentOS 7.6
・Rails 5.2.2
・ruby 2.3.1
ご参考までに。
kaminari導入
1.gemのインストール
事前にRails勉強用に作成したプロジェクトで進めます。
各MVCは適当に掲示板アプリを想定してPostsコントローラーなどを生成済みです。
(index,show,editの空ページが見れる程度)
$ rails g model post
$ rails g controller posts index show edit
その前提のもと、Gemfileに以下を追記。
# kaminari
gem 'kaminari'
追記したらインストール。
$ bundle install
-----------
Fetching kaminari-core 1.1.1
Installing kaminari-core 1.1.1
Fetching kaminari-actionview 1.1.1
Installing kaminari-actionview 1.1.1
Fetching kaminari-activerecord 1.1.1
Installing kaminari-activerecord 1.1.1
Fetching kaminari 1.1.1
Installing kaminari 1.1.1
-----------
→無事に完了。
2.kaminariを使ってみる
これでkaminariが使えるようになったようなので、
早速コントローラーやビューを調整してみます。
(※DBには事前にダミーデータを適当に複数件突っ込んでます。)
def index
# とりあえず基本形で表示してみる
@posts = Post.page(params[:page])
end
<h1>Posts#index</h1>
<p>Find me in app/views/posts/index.html.erb</p>
<table>
<thead>
<tr>
<th>name</th>
<th>content</th>
</tr>
</thead>
<tbody>
<% @posts.each do |post| %>
<tr>
<td><%= post.name -%></td>
<td><%= post.content -%></td>
</tr>
<% end %>
</tbody>
</table>
<%= paginate @posts -%>
3.動作確認
ではサーバーを立ち上げてページを見てみましょう。
表示されました!めっちゃお手軽。
ダミーデータは30件突っ込んでおいたのですが、
上記処理だとデフォルトは1ページあたり25件になるようです。
4.もう少し掘り下げてみる
これで所感に入るのも味気ないのでもう少し触ってみます。
早速1ページあたりの表示件数を10件に変更してみます。
def index
# 1ページの表示を10件に絞る
@posts = Post.page(params[:page])
end
あるいは
class Post < ApplicationRecord
# この方法でも1ページあたりの表示件数の調整が可能
paginates_per 10
end
そうすると、このように表示件数が制限出来ました。
また、そもそもとしてkaminari自体の設定を調整して、
表示件数のデフォルト値を変更することも可能。
$ rails g kaminari:config
create config/initializers/kaminari_config.rb
上記コマンドにて設定ファイルが生成されました。
# frozen_string_literal: true
Kaminari.configure do |config|
# config.default_per_page = 25
# config.max_per_page = nil
# config.window = 4
# config.outer_window = 0
# config.left = 0
# config.right = 0
# config.page_method_name = :page
# config.param_name = :page
# config.params_on_first_page = false
end
ケースバイケースで使い分けすると良さそうですね。
また今回は手を出しませんが、
$ rails g kaminari:views default
のコマンドにて、kaminariのテンプレートが生成され、
見た目を調整するのに使えるようです。
さらに
$ rails g kaminari:views bootstrap
とした場合は、Bootstrapで適用が可能。
さらにさらに、i18nにも別途対応することも可能とのこと。
奥が深い。
所感
手軽にページングが追加出来るのは良いですね。
一覧画面を表示するシステムを作る機会もなかなか多いので、
是非活用していきましょう。
おわりに
何かお気づきの点がありましたら、
ご指摘やアドバイス等頂けると大変助かります!