7

will_paginate プラグインを使用して、連続するページに分割された写真がいくつかあります。写真を開いてからリンクを使用してすべての写真に戻ると、常に最初のページに戻ります (たとえば、写真が 5 ページに表示されている場合、写真を開いてリンクをクリックしてすべての写真を表示し、そのページにいることを期待します)。再び 5 ページに戻りますが、現在は 1 ページにいます)。

さて、写真が属するページ番号を取得する方法はありますか?

GET パラメーターを渡そうとしましたが、これはユーザーがそれ以上のアクション (コメントの投稿、写真の編集など) を実行しない場合にのみ機能します。

4

3 に答える 3

8
page = (number_of_records_before_RECORD / number_of_records_per_page) + 1

言い換えると。写真の ID が 40 で、前に 25 のレコードがある場合 (いくつかのレコードが削除されたと仮定)、1 ページあたり 20 のレコード:

page = (25 / 20) + 1 = 2

を使用して、選択したレコードの前のレコード数をカウントできますModel.count(:conditions => ['id < ?', record.id], :order => 'id')。適切なクエリは、すべてのオブジェクトを一覧表示するときにそのテーブルに適用する並べ替えフィルターによって異なります。

于 2009-06-30T19:02:00.510 に答える
0

別の解決策は次のとおりです。will_paginate はクエリ文字列パラメーター「search_field」と「page」のみを使用します。これらは Rails の params ハッシュから抽出できます。セッション状態を使用してそれらを追跡している場合は、必要に応じてコントローラー コードでそれらを再適用できます。

それをどのように管理するかは、アプリケーションによって異なります。私が取り組んでいるアプリでは、一般的なコンテキストとメンバー コンテキストを区別できるようなフローになっています。ユーザーは、member#index ページからメンバー コンテキストに入ります。そのため、メンバー コンテキストへのエントリで session[:member_context] を設定しました。例: members#edit で。次に、members#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 ...

これは私のアプリケーションでうまく機能します。

于 2013-06-09T17:23:33.123 に答える
0

ページ番号は、検索結果に大きく依存します。検索には、結果セットと 1 ページあたりのアイテム数に応じて、1、10、または 100 ページが含まれる場合があります。

「すべての写真を表示」へのリンクには、説明したように GET パラメータを使用して、検索とページ付けの情報を含めることができます。または、ユーザーが新しい検索をクリアまたは選択するまで検索結果が保持されるように、Cookie を介して保存および取得します。

于 2009-06-30T18:25:53.493 に答える