動かざることバグの如し

近づきたいよ 君の理想に

will_paginateとSinatraでBootstrap版ページネーションをやってみる

ページネーション、もしくはページング

通常はRailsでしかできないけどやろうとすればSinatraでも実現可能

インストール

Gemfileに以下を追加

gem 'will_paginate-bootstrap'

will_paginateはActiveRecordに依存?しているようなので以下も追加しておく

gem "activerecord", :require => 'active_record'
gem "mysql2"

なおrequireには

require 'will_paginate/active_record'

も追加しておく必要がある。

ページネーションを表示

先に以下のようなダミーデータを生成しておく

200.times do |i|
    data = Hoge.new
    data.name = "name#{i}"
    r = rand(1..1000)
    data.email = "#{r}@gmail.com"
    data.save
end

でもってapp.rbで

get '/' do
    @data = Hoge.paginate(:page => params[:page], :per_page => 5)
    slim :index
end

index.slim

==will_paginate @data, renderer: BootstrapPagination::Sinatra

たったこれだけでページネーションが表示される すごい

カスタム

これだけだとさすがに寂しいのでカスタマイズする 例えば以下は両隣3ページ分表示し、前、次と表示される設定

==will_paginate @data, inner_window: 3, previous_label: "", next_label: "", renderer: BootstrapPagination::Sinatra

逆に前リンクと次リンクのみ表示させたい場合は以下

==will_paginate @data,page_links: false, renderer: BootstrapPagination::Sinatra

この辺のアプションは公式ドキュメントに載ってる

ページネーションはできたけど

これじゃ肝心のコンテンツが載らないではないかってことでメモ

- unless @data.empty?
    table border=1
        tr
            th name
            th e-mail
            - for item in @data do
                tr
                    td = item[:name]
                    td = item[:email]