dev/mom0tomo

技術メモ

Rails kaminariでページネーションを実装する

読んだもの

github.com

学んだこと

kaminariの使い方はすごく簡単。

tasks_controller.rb

def index
  @tasks = Task.all.page(params[:page])
  # @tasks = Task.all <- kaminari利用前のコード
end

index.html.erb

<h1>タスク一覧</h1>
<ul>
  <% @tasks.each do |task| %>
    <li>
      <%= link_to task.id, task_path(task) %> : <%= task.content %>
    </li>
  <% end %>
</ul>

# ページネーションしたいところに記述する
<%= paginate @tasks %>

<%= link_to '新しいタスクを登録', new_task_path %>

controllerのTask.all部分に .page(params[:page])を追加して、viewのページネーションしたいところに <%= paginate @tasks %>をつけるだけ。

表示数を変更する

1ページの表示数はデフォルトで26に設定されており、変更したいときは .per(number)をつける。

  def index
    @tasks = Task.all.page(params[:page]).per(10)
  end

表示順番を降順にする

表示順番を降順にしたい場合は、Controller側で orderを指定する。

tasks_controller.rb

def index
  @tasks = Task.order(created_at: :desc).page(params[:page]).per(10)
end

こんな感じ。