2011-07-13 9 views
0

私はwillespeginateでnewes Rails 3バージョンを使用しています。Rails 3:Will_paginateの.paginateが動作しません

@videos = user.youtube_videos.sort.paginate :page => page

私もyoutube_videoモデルに@@per_page属性を追加しました。

しかし、それだけでそれを改ページしません。私は常にコレクション内のすべてのアイテムを取得します。

どうしたのですか?

Yours、Joern。

+1

これはあなたに役立つ情報ではありません。 ':page => page'の' page'はどこから来ますか?また、ここで 'sort'を使うのは良い考えではないと思います。データベースレコードをソートする場合は、 ':order => ...'を使用するのがよいでしょう。 – Mischa

+0

ページ= setup_page(params [:page])| => | if!arg1.nil? arg1.to_iを返し、そうでなければ1を返します。 arg1はparams [:page] –

+0

will_paginate gemの '〜> 3.0.pre4'バージョンを使用してください。次に、per_pageを 'YoutubeVideo.per_page = 10'のように割り当てます。それは動作するはずです! – mislav

答えて

1

ここでは他のすべてのは、will_paginateとのトラブルを抱えて、この問題を読み取るための私の解決策は、私自身の答え、です:

は、このようなApplicationControllerにメソッドを作成します。

def paginate_collection(collection, page, per_page) 
    page_results = WillPaginate::Collection.create(page, per_page, collection.length) do |pager| 
    pager.replace(collection) 
    end 
    collection = collection[(page - 1) * per_page, per_page] 
    yield collection, page_results 
end 

次に、あなたが得たあなたのコントローラにページ分割されなければならないコレクション:

page = setup_page(params[:page]) # see below 
@messages = Message.inbox(account) 
paginate_collection(@messages, page, Message.per_page) do |collection, page_results| 
    @messages = collection 
    @page_results = page_results 
end 

そして、あなたのビューで:

<% @messages.each do |message| %> 
    <%# iterate and show message titles or whatever %> 
<% end %> 
<%= will_paginate @page_results %> 

定義さpage変数を取得するには、この点を確認してください。

def setup_page(page) 
    if !page.nil? 
    page.to_i 
    else 
    1 
    end 
end 

のでpage = setup_page(params[:page])は、その簡単な方法で、トリックを行います。


このWORKS!

2

なぜsortに電話しますか?それは不必要なようで、Videoモデルで定義されている変数に注意を払うよりも、すべての動画を見つけてページ区切りを呼び出すことになります。代わりに、スコープを使用してVideoモデルにソートロジックを移動するか、orderメソッドを使用します。

+0

私はそうしましたが、とにかく助けにはなりませんでした。ソートの代わりにComparableを含めると、私はちょうど "all_for_user"という新しいモデルインスタンスメソッドを作成しました:YoutubeVideo.all_for_user(user).paginate:page => page。 ..しかし、成功しなかった、同じ問題 –

+0

@ジョアン:なぜあなたもそれをやっていますか? YoutubeVideoのテーブルに 'user_id'カラムがないので、' user.youtube_videos'などのようにすることができますか? –

+0

これは私が最初にしたもので、ページネーションではうまくいきませんでした。この方法でもソートする必要があります...自分のメソッドをもっと作成することが好きです。ここで何が起こるべきかを明示的に定義できます。 –

関連する問題