LoginSignup
2
1

More than 5 years have passed since last update.

kaminariをRailsエンジンで使いたい超特殊ケース解決法

Last updated at Posted at 2018-07-07

Railsの超優秀なページネーションライブラリ「kaminari」。
Railsエンジニアだったら説明の必要がないgemだと思いますが、今回Railsエンジン内でも使いたいなぁ〜という(おそらく)超特殊ケースの対応をしました。実装に少しコツが必要だったのでまとめます。

kaminariとは?

フリ文にある通り、Railsエンジニアだったら説明の必要はないと思いますが、簡単に。

[GitHub]kaminari

超簡単にページネーションが実現できる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とは異なり、以下のような書き方をします。

~~.gemspec
s.add_dependency "moo"

kaminariのRailsエンジンでの使い方

Railsエンジン名 adminの場合

1. エンジン側でもkaminariをbundle install

Gemfileではなく、admin.gemspecに記載する

/admin/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オプションを使用する

/admin/app/views/hoge.html.erb
<%= paginate @admin_hoge, views_prefix: 'admin' %>

prefixとしてつけたエンジン名を指定してあげる

以上で使うことができます。kaminariのテンプレートを利用した裏技的なやつですが笑

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1