1

Rails3.2でRailsgemを使用していますwill_paginate。私のデータベースには約750本の映画があり、それらを自分のビューのテーブルに置いています。これがhamlです:

%h1 Listing movies
%table.table.table-striped
  %tr
    %th No.
    %th Name
    %th Rating
    %th
  - @movies.each_with_index do |movie, index|
    %tr
      %td= (index + 1) 
      %td= link_to movie.name, edit_movie_path(movie)
      %td= movie.rating
      %td= link_to 'Delete', movie, method: :delete, data: { confirm: 'Are you sure?' }

モデルにアルファベット順に並べ替えることdefault_scope order: 'name ASC'ができ、テーブルに一貫した数値リストを表示することができます。movie.rbeach_with_index

問題は、ページ付けを使用しているindexので、ムービー配列のがすべてのページから最初からやり直されるため、常に1〜10と表示されることです。

問題は、1ページ目に1-10と言ってから、2ページ目に11-20と言うようにするにはどうすればよいですか?

4

1 に答える 1

1

ページ インデックスを意図したとおりに動作させるには、will_paginate ソース コードを変更する必要があるようです (この SO 投稿を参照)。

これを回避するために、コントローラーで宣言され、ビューでインクリメントされるセッション変数を使用します。

session[:index] ||= 0
if params[:search]
   session[:index] = 0
end

# View
<% session[:index] = session[:index] + 1 %>

[編集済み]
別の解決策は、@pjam コメントのおかげで、will_paginateuse params[:page]によって返されることです。たとえば、 を設定した場合:per_page => 5、現在のページのインデックスは次のように計算できます。

@offset = (params[:page] - 1) * params[:per_page] + 1

# View
index + @offset
于 2013-01-07T00:42:53.910 に答える