2013-01-07 31 views
1

我在Rails 3.2中使用Rails will_paginate gem。我的數據庫中有大約750部電影,我認爲我把它們放在桌子上。這裏的HAML:Rails will_paginate:如何在頁面間保持一致的數組索引?

%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?' } 

我已經在我的movie.rb模型給他們按字母順序排序了default_scope order: 'name ASC'each_with_index讓我有表中他們的一致數值列表的功能。

問題是,現在我正在使用分頁,電影數組的index從每頁開始,所以它總是說1-10。

問題是,我怎樣才能讓頁面1說1-10,然後說第2頁11-20等?

回答

1

看來您可能需要修改will_paginate源代碼才能使頁索引按照您的意圖工作(請參閱this SO Post)。

我只是使用在控制器中聲明的會話變量,並在我的視圖中增加以解決此問題。

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

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

[EDITED]
的備選解決方案,以及由於@pjam評論,是由will_paginate返回use params[:page]。例如,如果你設置:per_page => 5,您的當前頁面的指數可以計算如下:

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

# View 
index + @offset 
+1

正如一個側面說明,我認爲使用會話變量將是矯枉過正。由於您有頁面參數可用,並且在模型中定義了per_page常量,您可以使用這兩個值爲輔助對象提供當前偏移量 – pjam

+1

這聽起來像是正確的軌跡,但由於某些原因,'params [:per_page]'返回nil,即使我在我的控制器的'index'方法中有這個:'@movies = Movie.search(params [:search])。paginate(per_page:10,page:params [:page])' – nickcoxdotme

+1

而不是'params [:per_page]',我嘗試了'Movie.per_page'並且工作。這是最好的解決方案嗎?如果是這樣,想把它添加到你的編輯? – nickcoxdotme