アイテムのページとwill_paginate
-
21-08-2019 - |
質問
will_paginateプラグインを使用して連続するページに分割された写真がいくつかあります。写真を開いてからリンクを使用してすべての写真に戻ると、常に最初のページに戻ります(たとえば、写真が5ページに表示されている場合は、写真を開いてリンクをクリックすると、すべての写真が表示されます。再び5ページですが、1ページにいます。
では、写真が属するページ番号を取得する方法はありますか?
GETパラメータを渡そうとしましたが、これは、ユーザーがこれ以上アクションを実行しない場合にのみ機能します(コメントの投稿、写真の編集など)。
解決
言い換えれば。写真のIDが40で、以前に25のレコードがあり(一部のレコードが削除されていると仮定)、1ページあたり20のレコードがある場合: ジェネラコディセタグプレ
Model.count(:conditions => ['id < ?', record.id], :order => 'id')
を使用して、選択したレコードの前のレコード数をカウントできます。
適切なクエリは、すべてのオブジェクトを一覧表示するときにそのテーブルに適用する並べ替えフィルターによって異なります。
他のヒント
ページ番号は、検索結果に大きく依存します。結果セットと1ページあたりのアイテム数に応じて、検索には1、10、または100ページが含まれる場合があります。
「すべての写真を表示」へのリンクには、説明したようにGETパラメータを使用して、検索とページ付けの情報を含めることができます。または、ユーザーが新しい検索をクリアまたは選択するまで検索結果が保持されるように、Cookieを介して保存および取得します。
別の解決策は次のとおりです。will_paginateはクエリ文字列パラメータ「search_field」と「page」を使用するだけです。これらは、Railsのparamsハッシュから抽出できます。セッション状態を使用してそれらを追跡している場合は、必要に応じてコントローラーコードでそれらを再適用できます。
それをどのように管理するかは、アプリケーションによって異なります。私が取り組んでいるアプリでは、フローは一般的なコンテキストとメンバーのコンテキストを区別できるようなものです。ユーザーは、member#indexページからメンバーコンテキストを入力します。したがって、メンバーコンテキストへのエントリ時にsession [:member_context]を設定するだけです。例えばMembers#editで。次に、members#indexに次のコードがあります: ジェネラコディセタグプレ
これは私のアプリケーションでうまく機能します。