日付を時系列に(最も古い日付から最も新しい日付まで)並べた結果を表示する必要があるインデックスページを作成していますが、デフォルトでは常に最後のページを表示する必要があります。
=(に必要なものの目的全体を無効にするため、日付にDESC注文を使用することはできません。
TL; DR:日付の昇順でソートされた、ページ付けされたログリストを表示する必要がありますが、最後のページから始まります。これはwill_paginateで可能ですか?ありがとう!
日付を時系列に(最も古い日付から最も新しい日付まで)並べた結果を表示する必要があるインデックスページを作成していますが、デフォルトでは常に最後のページを表示する必要があります。
=(に必要なものの目的全体を無効にするため、日付にDESC注文を使用することはできません。
TL; DR:日付の昇順でソートされた、ページ付けされたログリストを表示する必要がありますが、最後のページから始まります。これはwill_paginateで可能ですか?ありがとう!
クエリを作成し、最初のパスで合計ページを取得し、次のパスで最後のページを取得できます。
query = Log.some_scope
total_pages = query.paginate(:page => 1).total_pages
@logs = query.paginate(:page => total_pages)
will_paginateの代わりにKaminarigemを試すこともできます。これにより、これが少し快適になります。
これは私がついに到達した解決策です:
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回呼び出さないようにすることができますが、うまくいきます。ページに直接アクセスしようとすると、通常どおりにレンダリングされますが、ページを指定しない場合、デフォルトで最後のページに移動します。
このコードを試してください:
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
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