DatePaginate
A Rails plugs-in which can paginate data by time period. It will help you to improve your application performance especially when your data is orgnized by time partition.
Install
Put the line below in your Gemfile:
gem 'date_paginate'
Then bundle:
% bundle install
Usage
Query Basics
-
within_day, within_week, within_month scope for ActiveRecord
It will accpet a Date Type parameter, and a Symbol Type parameter.
To fetch diaries which are created today
Diary.within_day(Date.current) # :created_at by default
To fetch last week’s diaries which are updated last week
Diary.within_day(Date.current.week_ago(1), :updated_at)
To fetch diaries published in 2014/11
Diary.within_month(Date.parse("2014/11/1"), :published_at)
Date Type parameter means the time you want to query Symbol Type parameter means which column will be queried by time range.
within_week and within_month will accpet any day in the time range which you are searching for.
Controller
-
set_date, set_week, set_month helper methods
These three helper methods in controller can easily help you to set @date.
The example of controller:
class DiariesController < ApplicationController before_action :set_date, only: [:day] before_action :set_week, only: [:week] before_action :set_month, only: [:month] def day @diareis = Diary.within_day(@date) end def week @diareis = Diary.within_week(@date) end def month @diareis = Diary.within_month(@date) end end
Actually it just transfer params, parmas, params to Date type parameter @date.
View
Just add the line below to your view for create links of pagination:
<%= date_paginate %>
It has num_pages and date_paginate_type options.
-
num_pages: the number of links
-
date_paginate_type: the link type(:days, :months, :months) to render
<%= date_paginate num_pages: 6, date_paginate_type: :months %>
You can also use for short:
<%= date_paginate_days %>
<%= date_paginate_weeks %>
<%= date_paginate_months %>
If you want to use the default CSS styles of DatePaginate:
<%= stylesheet_link_tag "date_paginate/default" %>
General configuration options
You can configure the following default values by overriding these values using DatePaginate.configure
method. You can put it in config/initializers/date_paginate.rb:
DatePaginate.configure do |config|
config.default_num_pages = 6 # 6 by default
config.default_paginate_type = :months # :months by default (:days, :weeks, :months)
end