will_paginate和.sort =>

OXp*_*845 1 ruby sorting ruby-on-rails will-paginate ruby-on-rails-3

我最近安装了will_paginate gem并且它工作得很好,但我希望它可以使用我目前的设置.现在我在同一页面上显示所有Feed(或帖子),但是在点击该页面的人数之后对它们进行排序:

controller.rb

 @t = Time.now
 @h1 = @t - 1.hour
 @feeds = Feed.find(:all, :order => "created_at DESC").sort { |p1, p2| p2.impressionist_count(:filter=>:all, :start_date=>@h1) <=> p1.impressionist_count(:filter=>:all, :start_date=>@h1)}
Run Code Online (Sandbox Code Playgroud)

现在......我测试了paginate gem,如果我在控制器中执行此操作,它可以正常工作:

controller.rb

 @feeds = Feed.paginate(:per_page => 10, :page => params[:page], :order => "created_at DESC")
Run Code Online (Sandbox Code Playgroud)

所以我认为1 + 1 = 2并尝试将两者结合起来:

controller.rb

@feeds = Feed.paginate(:per_page => 10, :page=>params[:page], :order => "created_at DESC").sort { |p1, p2| p2.impressionist_count(:filter=>:all, :start_date=>@h1) <=> p1.impressionist_count(:filter=>:all, :start_date=>@h1)}
Run Code Online (Sandbox Code Playgroud)

我无法对帖子进行排序并对其进行分页.我尝试加载页面时收到错误:

#的undefined方法`total_pages'

我想这个工作,它会很甜蜜:).但是,如果它不起作用,还有其他方法吗?

提前致谢!

Pet*_*own 6

这是因为will_paginate默认只在ActiveRecord关系上有效.使用排序后,它将转换为数组.如果您希望will_paginate使用数组,则需要在控制器中支持它.

require 'will_paginate/array' 
Run Code Online (Sandbox Code Playgroud)