railsのkaminariを使ってページネーションを作成していきます。viewを編集して見た目も変えられるようにします。
kaminariのインストール
gem 'kaminari'
kaminariをまずはインストール
bundle install
bundle installでインストールを実行
kaminariの基本設定
ページネーションしたい部品をpage(params[:page]).per(20)でpageあたりいくつ表示させるか設定する。
controller
class HomeController < ApplicationController
def top
@posts = Post.page(params[:page]).per(20)
end
end
view
<% @posts.each do |post| %>
<div class="panel panel-success">
<div class="panel-body">
<%= link_to(post.content,"/posts/#{post.id}") %>
</div>
<div class="panel-footer">content_description</div>
</div>
<% end %>
<%= paginate @posts %>
paginateと繰り返す変数は同じものを設定する。@postをcontrollerの設定で繰り返し、その設定でpaginateも設定する。
pageメソッド
kaminariを導入すると、モデルクラスにpageメソッドが定義される。このメソッドは、ページネーションにおけるページ数を指定。ビューのリクエストの際paramsの中にpageというキーが追加されて、その値がビューで指定したページ番号となる。よって、pageの引数はparams[:page]となる。
perメソッド
perメソッドもpageメソッドと同様、kaminariというgemをインストールすることで利用できるメソッド。1ページあたりに表示する件数を指定。perメソッドに引数として渡した数字が、ページネーションが実装されたビューで1ページあたりに表示する件数になる。
変数名 = クラスを利用して取得したレコードのインスタンス.page(params[:page]).per(ここに1ページで表示したい件数を入力)※ページネーションを実装したいcontroller#actionに追加
view編集
rails g kaminari:views default
これでviews/kaminari以下にファイルができる。ここでデザインの修正ができる。
設定を変える
rails g kaminari:config
上記コマンドでconfigファイル作成。
Kaminari.configure do |config|
# config.default_per_page = 25 # 1ページ辺りの項目数
# config.max_per_page = nil # 1ページ辺りの最大数
# config.window = 4 # ex 値が2の場合 .. 2 3 (4) 5 6 ..
# config.outer_window = 0 # ex 値が2の場合 .. (4) .. 99 100
# config.left = 0 # ...になったときの左側の表示数
# config.right = 0 # ...になったときの右側の表示数
# config.page_method_name = :page # メソッド名
# config.param_name = :page # ページネーションのパラメーターの名前
end
並び順を変える
class HomeController < ApplicationController
def top
@posts = Post.page(params[:page]).per(6).order('updated_at DESC')
end
end
上記のようにpageメソッドを指定しているオブジェクトにorderメソッドをつける。