4

RubyOnRails 3.2.8でカミナリ0.13.0 を使用しています。

要素のデフォルトの順序が であると仮定しましょう。リストに要素があり、crated_atページごとにページ付けします。8{a, b, c, d, e, f, g, h}3

デフォルトでは、kaminari は、、 にリンクする次のページ リンク1, 2, 3を作成します。{h, g}{f, e, d}{c, b, a}

kaminari にページ リンクを逆順に作成させるにはどうすればよいですか? 3, 2, 1逆順の要素にリンクしている逆順のリンクを生成したい{h, g}, {f, e, d}, {c, b, a}.

私が解決しようとしている問題に関する少しの文脈:

ページ上の要素を created_at で並べ替えます。要素を同じページに永久に残したい。逆ページネーションを使用しないと、新しい要素を追加するたびにページの内容が変わります。したがって、上記のデフォルトのカミナリ動作の例では、リストにさらに要素を追加すると、以前とは異なり、{i, j}ページ1stに が含まれます。ページには、以前とは異なる内容が含まれます...これは、ブックメイキング、SEO などに悪影響を及ぼします。{j, i, h}{h, g}2nd{g, f, e}{f, e, d}

上記の逆ページ番号付けを行った場合、1stページには.{c, b, a}3rd{i, h, g}{j}

4

3 に答える 3

1

私は解決策を見つけました:

def index
  users_scope = Users.order(:whateva)
  @users = reverse_paginate(users_scope, params[:page])
end

def reverse_paginate(scope, page)
  if page
    page_number = page
  else 
    page_number = Kaminari.paginate_array(scope.reverse).page(1).per(10).num_pages
  end
  Kaminari.paginate_array(scope.reverse).page(page_number).per(10).reverse!
end

kaminari ページ ビューを更新し、URL_page.html.erbに追加する必要があります。?page=1

   url = "#{url}?page=1" if page.number == 1
   link_to_unless page.current?, page.number, url, opts = {:remote => remote, :rel => page.next? ? 'next' : page.prev? ? 'prev' : nil}
于 2013-03-17T13:47:59.730 に答える
0

注: この回答は、別の Stackoverflow の質問からクロスポストされています。

Github のreverse_kaminariという良いサンプル リポジトリが Github にあります。これらの線に沿った実装を提案しています(ソース)

class CitiesController < ApplicationController

  def index
    @cities = prepare_cities City.order('created_at DESC')
  end

  private

  def prepare_cities(scope)
    @per_page = City.default_per_page
    total_count = scope.count
    rest_count = total_count > @per_page ? (total_count % @per_page) : 0
    @num_pages = total_count > @per_page ? (total_count / @per_page) : 1

    if params[:page]
      offset = params[:page].sub(/-.*/, '').to_i
      current_page = @num_pages - (offset - 1) / @per_page
      scope.page(current_page).per(@per_page).padding(rest_count)
    else
      scope.page(1).per(@per_page + rest_count)
    end
  end

end

すべてのクレジットはAndrew Djogaに帰属します。彼はまた、アプリを動作するデモとしてホストしました。

于 2013-03-18T10:22:49.300 に答える