使用' sort_by'排序时出现分页问题

时间:2014-04-28 00:42:22

标签: sorting ruby-on-rails-4 pagination will-paginate

我从will paginate gem发出此错误:undefined method total_pages' for Array:0xa2710a0`

在我使用' sort_by' 而不是'订购后,尝试在我的艺术家控制器中进行分页。有没有人知道这方面的方法?看来你不能以这种方式使用paginate,因为@artists变成了一个数组而不是一个活跃的记录集合?任何建议表示赞赏

澄清我使用sort_by而不是.order来表示这3个参数,因为他们调用了模型中的函数,而不是我的Artist数据库表中的列。

def index
    if params[:search]
        @artists = Artist.search(params[:search].titleize).paginate(:page => params[:page]).order("created_at DESC")
    elsif params[:sort] == "numConcerts"
        @artists = Artist.all.paginate(:page => params[:page]).sort_by{|artist| artist.concerts.size}.reverse
    elsif params[:sort] == "avgRating"
        @artists = Artist.all.paginate(:page => params[:page]).sort_by{|artist| artist.avgOverall}.reverse
    elsif params[:sort] == "numReviews"
        @artists = Artist.all.paginate(:page => params[:page]).sort_by{|artist| artist.numReviews}.reverse
    else
        @artists = Artist.paginate(:page => params[:page]).order(:name)
    end
  end

视图中的代码只是

<%= will_paginate @artists %>

编辑:这似乎与我有同样的问题,它来自2008年,但我会尝试:http://pathfindersoftware.com/2008/06/how-to-use-will_paginate-with-non-activerecord-collectionarray/

编辑2:nope无法让它继续工作

编辑3:尝试做“要求&#39; will_paginate / array&#39;&#39;但那并没有解决它。

1 个答案:

答案 0 :(得分:1)

经过多次努力之后,我决定切换到kaminari,它的工作方式完全相同,但它似乎有更好的集成来处理数组。我这很简单就行了。

def index
    if params[:search]
        @artists = Artist.search(params[:search].titleize).order("created_at DESC").page(params[:page])
    elsif params[:sort] == "numConcerts"
        @artists = Kaminari.paginate_array(Artist.all.sort_by{|artist| artist.concerts.size}.reverse).page(params[:page]).per(15)
    elsif params[:sort] == "avgRating"
        @artists = Kaminari.paginate_array(Artist.all.sort_by{|artist| artist.avgOverall}.reverse).page(params[:page]).per(15)
    elsif params[:sort] == "numReviews"
        @artists = Kaminari.paginate_array(Artist.all.sort_by{|artist| artist.numReviews}.reverse).page(params[:page]).per(15)
    else
        @artists = Artist.order(:name).page(params[:page])
    end
end