2010-12-12 72 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

所以我同意他说在执行前将范围添加到查询中。