最近手上的项目需要使用到分页,并且只需要在前一页和后一页的导航,不需要链接到的具体的某一页,第一页或者最后一页。will_paginate 和 Kaminari 有点过于复杂,并且它们都会发送两条 SQL 语句来实现分页。于是就做了simple_paginate来通过发送一条 SQL 语句来实现,具体说明请看下面来自 README 的内容:
Simple pagination solution for previous and next page navigation.
We saw some websites using will_paginate
or kaminari
for pagination, but they just need previous and next page navigation, will_paginate
or kaminari
is overqualified.
Pagination in databae sometimes is slow because
simple_paginate
eliminates the additional COUNT sql, make your pagination faster.
will_paginate
and kaminari
uses page
and per_page
to calculate offset and limit, then send 2 sqls
SELECT * FROM posts OFFSET 20 LIMIT 10;
SELECT COUNT(*) FROM posts;
after getting total count, they can calculate total pages, then render page numbers, prev, next, first and last page links.
simple_paginate
also uses page
and per_page
to calculate offset and limit, but it only sends 1 sql
SELECT * FROM posts OFFSET 20 LIMIT 11;
it fetches one more record (11 = 10 + 1) to calculate if there is a next page records, so it doesn't need to send COUNT sql.
## perform a paginate query:
@users = User.paginate(:page => params[:page])
## render previous page link:
<%= link_to_previous_page @users, 'Previous' %>
## render next page link:
<%= link_to_next_page @users, 'Next' %>
## render previous page link and next page link
<%= simple_paginate @users
You can configure the following default values by overriding these values using SimplePaginate.configure method.
default_per_page # 25 by default
There's a handy generator that generates the default configuration file into config/initializers directory. Run the following generator command, then edit the generated file.
% rails g simple_paginate:config
SimplePaginate includes a handy template generator, To edit your paginator, run the generator first:
% rails g simple_paginate:views