大家好,我在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转换为数组。
任何人都可以帮助我吗?
提前致谢
答案 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
所以我同意他的观点,即在执行之前将范围添加到查询中。