# [Rails4][pagination]自製簡易分頁功能
###### tags: `Rails4`,`pagination`
## partials
_pagination.html.erb
```htmlmixed!
<%
=begin
params:
controller
action
id(optional)
extra_params(optional)
page_index
page_count
=end
%>
<!-- pagination -->
<%
extra_params= extra_params || {}
id= id || nil
path= Proc.new{|page_index| url_for(
{
controller: controller,
action: action,
id: id,
page_index: page_index
}.merge(extra_params)
)}
%>
<nav aria-label="..." class="mt-4">
<ul class="pagination">
<li class="<%= page_index.to_i<=1 ? 'page-item disabled' : 'page-item' %>">
<%= link_to "previous", path.call(page_index.to_i-1), class:"page-link" %>
<!-- <a class="page-link" href="#" tabindex="-1" aria-disabled="true">Previous</a> -->
</li>
<% [*1..page_count].each do |i| %>
<li class="<%= i.to_i == page_index.to_i ? 'page-item active' : 'page-item' %>">
<%= link_to i, path.call(i), class:"page-link" %>
</li>
<% end %>
<li class="<%= page_index.to_i>=page_count ? 'page-item disabled' : 'page-item' %>">
<%= link_to "next", path.call(page_index.to_i+1), class:"page-link" %>
</li>
</ul>
</nav>
<!-- /pagination -->
```
## 使用方式:
### 在要引用的view中加入以下程式碼:
```htmlmixed!
<%= render partial:"path/to/partials",locals:{
controller:"controller_name",
action:"action_name",
id: @cat.id,
page_index: @page_index,
page_count: @page_count
} %
```
### 在controller action加入以下程式碼
(以product為例):
```ruby!
@total = Product.count
@item_per_page = 5
@page_count = (@total.to_f / @item_per_page.to_f).ceil
@page_index=params[:page_index] ? params[:page_index] : 1
@products=Product.offset( (@page_index.to_i-1)*@item_per_page ).limit(@item_per_page)
```