Kaminari

参考:

kaminari/kaminari: A Scope & Engine based, clean, powerful, customizable and sophisticated paginator for Ruby webapps – GitHub

amatsuda/kaminari_themes – GitHub

ドキュメント

参考:

Documentation for kaminari | RubyDoc.info

Documentation for kaminari-core | RubyDoc.info

Documentation for kaminari-actionview | RubyDoc.info

Documentation for kaminari-activerecord | RubyDoc.info

使い方

参考:

gem (Kaminari) でページネーション機能を追加する – Qiita

kaminari を使ってページネーションを作る – Qiita

Rails で kaminari を使ってページネーションを実現する | Rails Webook

kaminari 徹底入門 – Qiita

page_entries_info

#page_entries_info(collection, options = {}) ⇒ Object

エントリー名を指定する

<%= page_entries_info @posts, entry_name: "item" %>
# => Displaying items 6 - 10 of 26 in total

参考:

Method: Kaminari::Helpers::HelperMethods#page_entries_info — Documentation for kaminari-core | RubyDoc.info

page_entries_info – kaminari/helper_methods.rb at v1.1.1 · kaminari/kaminari – GitHub

paginate

参考:

Method: Kaminari::Helpers::HelperMethods#paginate — Documentation for kaminari-core | RubyDoc.info

paginate – kaminari/helper_methods.rb at v1.1.1 · kaminari/kaminari – GitHub

Kaminari.paginate_array

@comments = Kaminari.paginate_array(comments).page(params[:page])

参考:

kaminari を使って配列に対してのページャーを作成する – Qiita

kaminari の paginate_array が便利 | それは Books

kaminari さんって配列もいけるんですね | COTegg のバケツ

Method: Kaminari.paginate_array — Documentation for kaminari-core | RubyDoc.info

Kaminari::ActiveRecordExtension

ActiveRecord::BaseKaminari::ActiveRecordExtension によって拡張されている。

::ActiveRecord::Base.send :include, Kaminari::ActiveRecordExtension

参考:

kaminari/activerecord.rb at v1.1.1 · kaminari/kaminari – GitHub

page

def self.#{Kaminari.config.page_method_name}(num = nil)
  per_page = max_per_page && (default_per_page > max_per_page) ?
                max_per_page : default_per_page
  limit(per_page).offset(
      per_page * ((num = num.to_i - 1) < 0 ? 0 : num)
  ).extending do
    include Kaminari::ActiveRecordRelationMethods
    include Kaminari::PageScopeMethods
  end
end

参考:

kaminari/active_record_model_extension.rb at v1.1.1 · kaminari/kaminari – GitHub

per

参考:

Method: Kaminari::PageScopeMethods#per — Documentation for kaminari-core | RubyDoc.info

paginates_per

参考:

Method: Kaminari::ConfigurationMethods::ClassMethods#paginates_per — Documentation for kaminari-core | RubyDoc.info

total_pages

参考:

Method: Kaminari::PageScopeMethods#total_pages — Documentation for kaminari-core | RubyDoc.info

total_pages – kaminari/page_scope_methods.rb at v1.1.1 · kaminari/kaminari – GitHub

total_count

参考:

Method: Kaminari::PaginatableArray#total_count — Documentation for kaminari-core | RubyDoc.info

kaminari/active_record_relation_methods.rb at v1.1.1 · kaminari/kaminari – GitHub

without_count

参考:

Method: Kaminari::ActiveRecordRelationMethods#without_count — Documentation for kaminari-activerecord | RubyDoc.info

without_count – kaminari/active_record_relation_methods.rb at v1.1.1 · kaminari/kaminari – GitHub

Pagination without having to SELECT COUNT(*). by bryanrite · Pull Request #681 · kaminari/kaminari – GitHub

paginate calls slow COUNT query for large sets (when it might not need to) · Issue #545 · kaminari/kaminari – GitHub

Kaminari without COUNT – Stack Overflow

SELECT COUNT(*) の上限を設ける

以下のように LIMIT を使えば、レコードが1万件以上あった場合に最大1万件しかスキャンしない。

SELECT COUNT(*) FROM (SELECT * FROM table_has_many_entries LIMIT 10000);

参考:

MySQL で count(*) の結果がある一定数以下である場合にのみカウントしたい – Qiita

greater than some number without having to get the exact count? – Stack Overflow

COUNT をキャッシュする

参考:

Kaminari が発行する遅い COUNT クエリの結果をキャッシュする | portal shit!

クラウドワークスを支えてないページネーション技術 – Qiita

Kaminari::Helpers::Tag

参考:

kaminari/tags.rb at v1.1.1 · kaminari/kaminari – GitHub

Kaminari::Helpers::Paginator

参考:

kaminari/paginator.rb at v1.1.1 · kaminari/kaminari – GitHub

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です