A Little Each Day

note to self

Railsでwill_paginateを使ってページネーションを実装する

こんにちは。本日はページネーションGemのwill_paginateを使ってページングを実装する方法です。

will_paginateと似たようなGemに「kaminari」というGemがあります。

どちらも人気のページャーGemですが、今回はwill_paginateの使い方を説明していきます。

railsアプリの作成

まずはじめに、サンプルとなるRailsアプリを作成しましょう。

$ rails new sample


今回はタイトルと内容を持つポストモデルを作成します。

$ cd sample
$ rails g scaffold Post title:string content:text


初期データを1000件投入します。

1000.times do |i|
  Post.create(
    title:    "タイトル#{i}",
    content:  "内容#{i}"
  )
end


データをマイグレーションしましょう。

$ rake db:migrate


初期データを投入します。

$ rake db:seed


これで以下のようにたくさんのデータが表示されていると思います。

f:id:chi_kun:20170706153637p:plain


これで下準備はOKです。


will_paginateのインストールと使い方

まずはGemfileを編集します。

gem 'will_paginate'


インストール

$ bundle install


次にViewとControllerをそれぞれ編集していきます。

まずはViewでページネーションを表示したいところにwill_paginateが用意しているメソッドを書きましょう。

# index.html.erb

<%= will_paginate @posts %>


Controllerも同じように編集していきます。

# posts_controller

def index
  @posts = Post.paginate(:page => params[:page])
end


するときちんとページネーションができているのがわかると思います。

f:id:chi_kun:20170708201137p:plain


もし1ページあたりの件数を変えたい場合は、モデルで指定しても大丈夫です。

# post.rb

class Post
  self.per_page = 10
end


この場合は1ページあたり10件表示します。

ちなみにデフォルトでは30件表示します。


国際化

will_paginateを国際化するには、localesファルダにwill_paginateに対応した辞書ファイルを設置します。

# ja.yml

ja:
  will_paginate:
    previous_label: ""
    next_label: ""


今回は日本語だけですが、他の言語もGitHub上などでインストールできるので、各自試してみてください。


Bootstrapに対応させる

will_paginateは簡単にBootstrapに対応させることができます。

※Bootstrapのインストールは過去記事を参照してください。

blog.otsukasatoshi.com


まずGemfileを編集します。

gem 'bootstrap-will_paginate'


インストール

$ bundle install


サーバーを再起動します。

f:id:chi_kun:20170708203335p:plain


するときちんとページネーション部分にBootstrapが適用されているのがわかると思います。



本日は以上です。