ここで別の解決策があります:will_paginateはクエリ文字列パラメータ 'search_field'と 'page'を使用します。 Railsのparamsハッシュからこれらを抽出することができます。セッション状態を使用しているセッションを追跡している場合は、必要に応じてコントローラコードでそれらを再適用できます。
あなたの管理方法は、アプリケーションによって異なります。私が作業しているアプリケーションでは、一般的なコンテキストとメンバコンテキストを区別できるような流れです。ユーザーはメンバー#indexページからメンバーコンテキストを入力します。だから私は、メンバコンテキストへのエントリにsession [:member_context]を設定するだけです。例えばメンバー#編集で次にメンバー#indexには、次のコードがあります。
if session[:member_context]
@search_field = session[:search_field]
@page = session[:page]
# toggle out of member context
session[:member_context] = nil
else
@search_field = params[:search_field]
@page = params[:page]
# record lastest search in case the user subsequently enters the member context
session[:search_field] = @search_field
session[:page] = @page
end
@members = Member.where(<use @search_field>).page(@page)
# and render ...
これは私のアプリケーションでうまくいきます。
これは解決策ですが、このコードがプラグインでデフォルトでは実装されていないのは不思議です。パフォーマンスに関して言われたことをするのは意味がありません。 – collimarco
Becau実際には幅広い視聴者には意味をなさない。これは完璧な解決策ではなく、あなたの特定の必要性に対する回避策です。また、will_paginateは、追加のActiveRecord機能ではなく、ページ区切り機能を提供します。 –
私はそれが巨大なパフォーマンスヒットになるとは思わなかったでしょう。ページネーションライブラリを使用している場合、ページング総数を得るためにページングしているすべてのものがカウントされます。注文している列が正しく索引付けされている場合は、現在のページを見つけるために同様の数を取得するのは面倒ではありません。 – Shadwell