Railsでkaminariを使ってみる

Ruby2/Rails4でHello, world!を表示してみる
の続き

Railsでkaminariを使ってみる。

【参考】
AdventCalendar - kaminari徹底入門 - Qiita
http://qiita.com/nysalor/items/77b9d6bc5baa41ea01f3

Railsライブラリ紹介: ページングを行う「kaminari」 TECHSCORE BLOG
http://www.techscore.com/blog/2013/01/07/rails%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E7%B4%B9%E4%BB%8B-%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%B3%E3%82%B0%E3%82%92%E8%A1%8C%E3%81%86%E3%80%8Ckaminari%E3%80%8D/

データの準備

とりあえず、テーブルを作成し、

$ rails generate model item name:string price:integer
$ rake db:migrate

データを100件ほど追加する。

$ vi db/seeds.rb
for i in 1..100 do
  Item.create(:name => '商品' + i.to_s, :price => rand(100..1000));
end
$ rake db:seed

下記のような感じでデータが入ってるのが確認できる。

$ rails db
sqlite> select name,price from items limit 5;
商品1|128
商品2|865
商品3|933
商品4|622
商品5|145
sqlite> .quit

まずは全件表示

まずは、kaminariを使わず普通に全件表示してみる。

コントローラを下記のように修正し、

$ vi app/controllers/sample_controller.rb
class SampleController < ApplicationController
  def index
    @items = Item.all;
  end
end

ビューを下記のようにする。

$ vi app/views/sample/index.html.erb
<table border>
<% @items.each do |item| %>
  <tr><td><%= item.name %><td><%= item.price %> <br>
<% end %>
</table>

サーバーを起動してアクセスすると、

$ rails server

全件表示される。

kaminariを使ってみる

kaminariのgemを設定してインストールする。

$ vi Gemfile
・・・
gem 'kaminari'	←追加
$ bundle install

kaminariで1ページ分のデータを取得する。

$ vi app/controllers/sample_controller.rb
class SampleController < ApplicationController
  def index
    @items = Item.page(params[:page])
  end
end

ビューにページャーを追加する。

$ vi app/views/sample/index.html.erb
<table border>
<% @items.each do |item| %>
  <tr><td><%= item.name %><td><%= item.price %> <br>
<% end %>
</table>

<%= paginate @items %>	←追加

サーバーを起動してアクセスすると、

$ rails server

1ページ分表示される。

Nextをクリックすると、次のページが表示される。