@Konboi memo

主に技術に関してつらつらと。

kaminariを .html.erb 以外にも対応させる

はじめに

保存されいてるデータを表示させるのに、データ数が多いと1度に表示させられるデータに 限界があり、可視性や表示スピードからもある一定の数を超えてくるとページャーの実装が必要に なってくると思います。ただ、ページャーを自分で実装するのは慣れていないと意外と面倒臭いものです。

その面倒な実装をしなくてすむのが、kaminariです。

今回は簡単な使い方と、.html.erb 以外の拡張で使用するとエラーがでるのでそれの解決方法をメモしておきます。

kaminariの使い方

Kaminariの使い方 Rails3時代のpaginationの標準候補が分かりやすくまとまっているのでこちらを参考にしていただければ大方大丈夫だと思います。

インストール

Gemfileに下記を追記してインストール

gem 'kaminari'

設定

使用したいModelにkaminariの設定を記述します。

Model側

 # result.rb

class Result < ActiveRecord::Base
  attr_accessible :string

  # 降順で4つずつ
  default_scope :order => 'created_at DESC'
  paginates_per 4
  
end

Controll側

  @results = Result.order('created_at DESC').page params[:page]

View側

....

<%= paginate @results %>
....

このように記述すると良い感じのPagerが設置されます。

f:id:Konboi:20130213161622p:plain

.html.erb でも使用する

問題

1つ問題なのが、PCとSPでテンプレートを分け

  • PC: .html.erb

  • SP : .smartphone.erb

というような拡張子を使っている場合に、PCと同様に

<%= paginate @results %>

と記述するとエラーになります。

f:id:Konboi:20130213163154p:plain

これは kaminari の app/views をみてもらうと分かりますが、下記の拡張子のファイルしか対応してないためです。

f:id:Konboi:20130213162421p:plain

解決方法

今回のように .smartphone.erb に対応させにはファイルを追加すれば問題ありません。

bundle exec rails g kaminari:view

すると自分のプロジェクトの app/views 以下に kaminari ディレクトリが生成されます。 これは本来 kaminari デフォルトのpagerを上書きするために生成されます。

ここに生成される .html.erb ファイルの拡張子を全て .smartphone.erb に書き換えれば大丈夫です。

f:id:Konboi:20130213163254p:plain