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+