无法将nil转换为数组will_paginate

时间:2010-12-12 20:46:11

标签: ruby-on-rails

大家好,我在rails 3中遇到了will_paginate的问题,我在我的constroller中有这个

@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转换为数组。

任何人都可以帮助我吗?

提前致谢

3 个答案:

答案 0 :(得分:11)

您需要安装will_paginate版本3.0.pre2才能在数据库级别而不是在阵列上进行分页工作。

gem 'will_paginate', '3.0.pre2'

答案 1 :(得分:8)

尝试这样做:

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

这是Rails 3的首选方式。

答案 2 :(得分:2)

iain已经回答了这个问题,但我只想添加一些数据来备份他的声明,即此命令不会对整个集合进行分页

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

所以我同意他的观点,即在执行之前将范围添加到查询中。