Rails에서 kaminari를 이용하여 Pagination 구현하기(How to make pagination on rails(with kaminari)

Rails에서 페이지(Pagination)를 쉽게 구현할 수 있는 라이브러리는 kaminari, will_paginate 등이 있습니다. 그중에서 오늘은 kaminari를 가지고 페이지를 만드는 내용으로 글 작성해봅니다.

A Scope & Engine based, clean, powerful, customizable and sophisticated paginator for Ruby webapps

Install & Gemfile

우선 Rails 앱의 Gemfile에 kaminari 를 추가해줍니다.

Gemfile

gem 'kaminari'

bundle install

추가 시점 이후부터, 기존에 있던 모델, 신규 생성한 모델에 page라는 메소드가 생깁니다. 이 메소드는 해당 모델 데이터를 페이지화하고, 관련 기능을 쓸 수 있도록 제공해줍니다.

User.count                     #=> 1000
User.page(1).limit_value       #=> 20
User.page(1).total_pages       #=> 50
User.page(1).current_page      #=> 1
User.page(1).next_page         #=> 2
User.page(2).prev_page         #=> 1
User.page(1).first_page?       #=> true
User.page(50).last_page?       #=> true
User.page(100).out_of_range?   #=> true

제 케이스로 보면… 우선 컨트롤러에 이런식으로 page()로 현재 페이지 위치를 표현해주도록 구성해준 후 ..

Controller

def index
  # @scans = Scan.all
  @scans = Scan.page(params[:page])
end

뷰에서 paginate 통해 페이지 뷰를 만들어줍니다.

view (index)

<%= page_entries_info @scans %>
# 현재 page에 대한 정보

<%= paginate @scans %>
# 페이지 네비게이터
# 기본적으로 25개 기준으로 적용됨

요렇게까지 하고 Rails app에서 보면 페이지 기능이 생성된걸 볼 수 있습니다. (이걸 직접 만들면 개고생)

Custom Setting

kaminari 설정에 대해 직접 재정의하여 사용할 수도 있습니다. 우선 kaminari에 정의된 config를 생성해줍니다.

rails g kaminari:config

그다음 config > init 하위에 kaminari 설정 데이터가 들어가는데, 여기서 한번에 몇개의 리스트를 보여줄지, 최대 얼만큼할지 등등 지정할 수 있습니다.

config/initializers/kaminari_config.rb

Kaminari.configure do |config|
  default_per_page      # 25 by default
  max_per_page          # nil by default
  max_pages             # nil by default
  window                # 4 by default
  outer_window          # 0 by default
  left                  # 0 by default
  right                 # 0 by default
  page_method_name      # :page by default
  param_name            # :page by default
  params_on_first_page  # false by default
end

Supported

  • Ruby 2.0.0, 2.1.x, 2.2.x, 2.3.x, 2.4.x, 2.5.x, 2.6.x, 2.7
  • Rails 4.1, 4.2, 5.0, 5.1, 5.2, 6.0
  • Sinatra 1.4, 2.0
  • Haml 3+
  • Mongoid 3+
  • MongoMapper 0.9+
  • DataMapper 1.1.0+

Reference

https://github.com/kaminari/kaminari