2010-12-12 67 views
6

好傢伙,我有這個在我的constroller不能轉換成零陣will_paginate我有在軌道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%>在我看來,但我得到這個錯誤不能將nil不斷轉換成Array。

任何人都可以幫助我嗎?

在此先感謝

回答

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

Iain非常感謝!這解決了這個問題 – Michael 2010-12-12 20:54:31

+0

如果你有1000個帖子,這將加載他們全部,數組分頁。效率不高。 – 2011-02-09 21:37:34

+2

它不應該;它仍然是一個集合,因此它應該在查詢執行前將範圍添加到查詢中。 – iain 2011-02-09 23:13:15

11

您需要安裝will_paginate版本3.0.pre2才能在數據庫級別而不是數組上運行分頁。

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

今天有這個問題,這就是我需要做的! – 2011-02-12 11:38:20

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) 

這是一個數據庫上運行在投票表(Postgres)中有500,000行,Rails 3.0.5

所以我同意他說在執行前將範圍添加到查詢中。