2012-04-20 10 views
0

私はたくさんの投稿をしていますが、私はいつもページあたり3枚を表示したいと思います。ページあたり3つの結果と、1ページが含まれます、最後にwill_paginateとRails 3に達したときに最初の投稿を取得する方法は?

post 1 
post 2 
post 3 
post 4 

私はwill_paginate(または実際に任意のページネーションプラグイン)を使用する場合::

post 1 
post 2 
post 3 

とページ2意志を次のように私は、4つのポストを持っていると言います

:私は、そのページが1のような、戻って最初にポスト1、2、3、および2ページ意志ループが含まれていますので、それをしたいのですが

post 4 

が含まれています

post 4 
post 1 
post 2 

どのように達成できますか? ありがとう!

+0

3ページに表示する必要がありますか?それは '[3、4、1]'ですか? –

答えて

2

WillPaginateは実際にはWillPaginate::Collection.createで直接使用するコレクションを定義します。私は次のようなコードの一部は、このトリックを行う必要があります:

@posts = Post.offset((page - 1) * per_page).limit(per_page) 
post_count = @posts.count 
if post_count < per_page 
    @posts = @posts.all + Post.limit(per_page - post_count).all 
end 

# At this point you have an array of posts. 
# Now we create the WillPaginate::Collection so will_paginate will work. 

@posts = WillPaginate::Collection.create(page, per_page) do |pager| 
    pager.replace(@posts) 
    pager.total_entries = Post.count 
    pager 
end 
+0

まだ現在のページを設定する必要があります。そうしないと、ページネーションは機能しません。 –

+0

@KandadaBogguはい、明らかに、私は 'page'と' per_page'変数がこの解決策のために設定されていると仮定しています。 – tsherif

+0

私が意味することは、 'WillPaginate :: Collection'クラス内の' current_page'アクセサは、最初のページにリサイクルしたい場合、最後のページを最初のページに戻す必要があるということです。 –

関連する問題