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 %>