Railsの超優秀なページネーションライブラリ「kaminari」。
Railsエンジニアだったら説明の必要がないgemだと思いますが、今回Railsエンジン内でも使いたいなぁ〜という(おそらく)超特殊ケースの対応をしました。実装に少しコツが必要だったのでまとめます。
kaminariとは?
フリ文にある通り、Railsエンジニアだったら説明の必要はないと思いますが、簡単に。
超簡単にページネーションが実現できるgemです。汎用性が高いので、ページネーションを実装したい時はkaminari一択と言っても過言ではないかと。
viewもカスタマイズ可能で、テンプレートやテーマをいくつか作って違うデザインのページネーションを使い分けることもできます。
※テンプレートは名前空間化して区別している場合に使い、テーマは同じ名前空間内で分けたい場合に使います。下はkaminariのviewカスタマイズ用ディレクトリが作成される場所です。
テンプレート: ~~/views/admin/kaminari/
テーマ: ~~/views/kaminari/admin/
ちなみにですが、kaminariもRailsエンジンで実装されています。
Railsエンジンとは?
Rails エンジン入門
(こちらの内容から必要なものをピックアップし、簡単にまとめたものになっています。)
Railsエンジンは簡単に言うと、ミニrailsアプリケーションのようなものです。というかRails::ApplicationクラスはRails::Engineクラスを継承しているので、より上位の概念と言ってもいいでしょう。
Railsでは、そのRailsエンジンをプラグイン(gem)という形でアプリケーションに組み込めるようにしていて、名前空間化されたミニRailsアプリケーションをアプリケーション内に作ることができます。
つまり、Railsエンジンはそれ自体がgemです。
なので、エンジン内でgemを使用したい場合はその依存関係をGemfileではなく、エンジンの.gemspecファイルに記述します。
またその書き方もGemfileとは異なり、以下のような書き方をします。
s.add_dependency "moo"
kaminariのRailsエンジンでの使い方
Railsエンジン名 admin
の場合
1. エンジン側でもkaminariをbundle install
Gemfileではなく、admin.gemspecに記載する
s.add_dependency "kaminari"
ターミナルで
admin [User]$ bundle install
2. views-prefixを使ってkaminariのテンプレートをgenerate
ターミナルで
admin [User]$ rails g kaminari:views default --views-prefix admin
エンジン名をprefixとして指定してあげると、/admin/app/views/admin/にkaminariのview用ディレクトリを作ってくれます
3. viewからの呼び出しはviews_prefixオプションを使用する
<%= paginate @admin_hoge, views_prefix: 'admin' %>
prefixとしてつけたエンジン名を指定してあげる
以上で使うことができます。kaminariのテンプレートを利用した裏技的なやつですが笑