我有點博客/維基應用程序,我希望主頁包含一個歡迎/着陸消息和5個最新的博客條目和分頁鏈接到較舊的條目。rails分頁 - 不同的per_page價值頁面1從後續頁面
是否有可能將5頁作爲分頁搜索結果的頁面返回,對於後續頁面返回15頁?我目前正在使用will_paginate。
我有點博客/維基應用程序,我希望主頁包含一個歡迎/着陸消息和5個最新的博客條目和分頁鏈接到較舊的條目。rails分頁 - 不同的per_page價值頁面1從後續頁面
是否有可能將5頁作爲分頁搜索結果的頁面返回,對於後續頁面返回15頁?我目前正在使用will_paginate。
您可以使用WillPaginate::Collection
,這裏有一個例子,你可以用於此:
def self.find_with_pagination(params = {})
WillPaginate::Collection.create(params[:page].to_i < 1 ? 1 : params[:page], per_page_for_page(params[:page])) do |pager|
# inject the result array into the paginated collection:
pager.replace(find(:all, params.merge({:limit => pager.per_page, :offset => pager.offset)}))
unless pager.total_entries
# the pager didn't manage to guess the total count, do it manually
pager.total_entries = self.count
end
end
end
def self.offset_for_page(page_number)
page_number.to_i > 1 ? ((page_number.to_i - 2) * 15 + 5) : 0
end
def self.per_page_for_page(page_number)
page_number.to_i > 1 ? 15 : 5
end
我希望這會有所幫助,這裏是一個鏈接爲文檔: http://rdoc.info/github/mislav/will_paginate/master/WillPaginate/Collection
我還沒有試過這個,但也許通過覆蓋後續頁面上的參數[:per_page]將工作。喜歡的東西:
由於控制器是一樣的東西:
@posts = Post.paginate :page => params[:page], :per_page => 10, :include => [:posts], :conditions => ["post.user_id = ?", current_user.id], :order => "title,created_at"
的觀點或許可以在它是這樣的:
<%= params[:page] == 1 ? will_paginate @posts : will_paginate @posts, :per_page => 15 %>
喜karudzo並感謝您的回答。這種方法的問題是職位6-10永遠不會被看到。 – mark 2011-01-28 19:25:53
對我來說,這聽起來像你有兩個截然不同的意見,你試圖合併成一個:「歡迎」和「檔案」。將一頁分成兩份可能會更簡單:
will_paginate
d。是的,前五個帖子也會出現在這裏,但這是檔案中的預期(可能是好的)。只是一種不同的思考方式 - 希望它有幫助!
嗨澤維爾。感謝您的回答,但在我的情況下,這種方法將無法工作。我真的不認爲他們是獨特的觀點;這種方法對博客來說相當典型。想象一下,最新的帖子在頭版上有更大的表示,比如說1-5和6-10的正常大小。然後在第二頁上,我會以相似的總頁面尺寸發送15個正常大小的文章。不過再次感謝這個想法。 – mark 2011-02-04 09:52:56
是的,答案有點老,但我會在這裏給我解決方案在Rails 4.2上,因爲它有點不同。
我在第一頁需要10個結果,而在其他頁面需要12個結果。
item.rb的
def self.find_with_pagination(params = {}, filters = {})
WillPaginate::Collection.create(params[:page].to_i < 1 ? 1 : params[:page], per_page_for_page(params[:page])) do |pager|
result = Item.all.limit(pager.per_page).offset(offset_for_page(params[:page])).where(filters)
pager.replace result
unless pager.total_entries
# the pager didn't manage to guess the total count, do it manually
pager.total_entries = self.count
end
end
end
def self.offset_for_page(page_number)
page_number.to_i > 1 ? ((page_number.to_i - 2) * 12 + 10) : 0
end
def self.per_page_for_page(page_number)
page_number.to_i > 1 ? 12 : 10
end
your_super_controller.rb
@items = Item.find_with_pagination(params, @filters)
非常感謝。看起來不錯,但沒有時間在mo上查看。肯定會很棒,但會回來。 – mark 2011-02-01 19:53:23