2010-12-12 17 views
6

こんにちはみんなは、私は、私のconstroller私の見解では、私がレール3にwill_paginateで問題が発生しています

@posts = Post.paginate(:all, 
    :include => [:author, :categories], 
    :conditions=>"status = 'published'", 
    :order=>"blog_posts.created_at DESC", 
    :per_page => 1, :page => params[:page]) 

と<% = will_paginate @posts%>でこれを持っているアレイwill_paginateにnilを変換することはできませんが、私はこのエラーが常に配列にnilを変換することはできません取得しています。

誰でも手伝ってもらえますか?事前

答えて

8

おかげでこれをやってみてください。

@posts = Post.includes(:author, :categories).where(:status => "published").order("blog_posts.created_at DESC").paginate(:per_page => 1, :page => params[:page]) 

それはRailsの3好ましい方法です。

+0

イアン感謝!それが問題を解決しました – Michael

+0

投稿が1000件ある場合は、すべて読み込まれ、配列のページが変更されます。あまり効率的ではありません。 –

+2

そうではありません。それはまだコレクションなので、実行前にスコープをクエリに追加する必要があります。 – iain

11

ページレベルの作業を配列ではなくデータベースレベルで行うには、will_paginateバージョン3.0.pre2をインストールする必要があります。

gem 'will_paginate', '3.0.pre2' 
+0

今日この問題があり、それが私が実際にやる必要があったことです! –

2

イアンはすでに、この質問に答えた、しかし、私はちょうどこのコマンドは、これがデータベース上で実行された

irb(main):005:0> Benchmark.bm do |x| 
irb(main):006:1* x.report {Vote.all.paginate(:per_page => 10, :page => 1)} 
irb(main):007:1> x.report {Vote.order("created_at DESC").paginate(:per_page => 10, :page => 1)} 
irb(main):008:1> end 
     user  system  total  real 
210.490000 0.740000 211.230000 (214.754060) 
    0.000000 0.000000 0.000000 ( 0.429304) 

コレクション全体ページ番号を付けていないことを彼の声明をバックアップするためにいくつかのデータを追加したいですVoteテーブル(postgres)に500,000行あり、Rails 3.0.5

私は、実行前にスコープがクエリに追加されていることに同意します。

関連する問題