4

日付を時系列に(最も古い日付から最も新しい日付まで)並べた結果を表示する必要があるインデックスページを作成していますが、デフォルトでは常に最後のページを表示する必要があります。

=(に必要なものの目的全体を無効にするため、日付にDESC注文を使用することはできません。

TL; DR:日付の昇順でソートされた、ページ付けされたログリストを表示する必要がありますが、最後のページから始まります。これはwill_paginateで可能ですか?ありがとう!

4

4 に答える 4

3

クエリを作成し、最初のパスで合計ページを取得し、次のパスで最後のページを取得できます。

query = Log.some_scope
total_pages = query.paginate(:page => 1).total_pages
@logs = query.paginate(:page => total_pages)

will_paginateの代わりにKaminarigemを試すこともできます。これにより、これが少し快適になります。

于 2012-09-05T23:40:01.960 に答える
1

これは私がついに到達した解決策です:

if params[:page]
    @collection = @q.result(distinct: true).paginate(:page => params[:page], :per_page => 30)
else
    last_page = @q.result(distinct: true).paginate(:page => params[:page], :per_page => 30).total_pages
    @collection = @q.result(distinct: true).paginate(:page => last_page, :per_page => 30)
end

それは派手ではなく、リファクタリングが必要であり、おそらくメモ化を使用してpaginateメソッドを2回呼び出さないようにすることができますが、うまくいきます。ページに直接アクセスしようとすると、通常どおりにレンダリングされますが、ページを指定しない場合、デフォルトで最後のページに移動します。

于 2012-09-06T13:20:46.793 に答える
1

このコードを試してください:

if params[:page]
    @collection = @q.result(distinct: true).paginate(:page => params[:page], :per_page => 30)
session[:lastpage] = params[:page]
else
    @collection = @q.result(distinct: true).paginate(:page => session[:lastpage] = params[:page], :per_page => 30)
end
于 2016-10-02T11:17:42.913 に答える
0
if params[:page]
    @collection = ordered_query_results.paginate(page: params[:page], per_page: PER_PAGE)
else
    total_results = ordered_query_results.count
    last_page = total_results / PER_PAGE + (total_results % PER_PAGE == 0 ? 0 : 1)
    @collection = ordered_query_results.paginate(page: last_page, per_page: PER_PAGE)
end
于 2013-11-10T02:22:33.720 に答える