# [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) ```