kaminari的安装和基本使用

和will_paginate相比,kaminari更新,兼容性更好

#添加gem
gem "kaminari"

#添加配置文件
rails g kaminari:config  
#上面的语句生成如下的配置文件config/initializers/kaminari_config.rb
Kaminari.configure do |config|
  # config.default_per_page = 25  #这里设置每页的数据
  # config.max_per_page = nil
  # config.window = 4
  # config.outer_window = 0
  # config.left = 0
  # config.right = 0
  # config.page_method_name = :page
  # config.param_name = :page
  # config.params_on_first_page = false
end

#controller中需要添加page方法,下面这句必须添加,因为会让@articles变成kanimari的对象,可以使用paginate方法
@articles = Article.order("created_at desc").page(params[:page]) #这句必须添加

#controller中指定第几页以及每页数据
@articles = Article.order("created_at desc").page(7).per(20)
#view文件中添加相应语句
paginate @articles

kaminari呈现bootstrap样式

#查看kaminari可以使用的样式
rails g kaminari:views
#使用bootstrap4样式
rails g kaminari:views bootstrap4  #前提在项目中已经使用了bootstrap3,参考bootstrap章节

kaminari国际化

#进行国际化配置config/application.rb
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*.{rb,yml}').to_s]
config.i18n.default_locale = :zh
config.encoding = 'utf-8'

#新建config/locales/zh.yml文件,填充内容如下
zh:
  views:
    pagination:
      first: "« 首页"
      last: "末页 »"
      previous: "‹ 上页"
      next: "下页 ›"
      truncate: "..."

#进行参数过滤application_controller.rb
class ApplicationController < ActionController::Base 
    before_action :set_locale 

    def set_locale 
      I18n.locale = params[:locale] || I18n.default_locale 
    end 
end

使用ruby的core方法来实现分页的符号

#使用each_with_index和kaminari中的params[:page]
<% @tags.each_with_index do |tag, index| %>
    <div class="d-flex justify-content-between">
      <div>
        <%= params[:page] ? (index + 1 + (params[:page].to_i-1)*10) : (index+1) %>.
        <%= tag.name %>
      </div>
      <div>
        <%= link_to '编辑', edit_tag_path(tag), class: "badge badge-primary"%>
        <%= link_to '删除', delete_tag_path(tag), remote: true, class: "badge badge-primary" %>
      </div>
    </div>
<% end %>
<%= paginate @tags %>

results matching ""

    No results matching ""