【问题标题】:issue with pagination when sorting using 'sort_by'使用“sort_by”进行排序时出现分页问题
【发布时间】:2014-06-13 09:29:08
【问题描述】:

我从will paginate gem: undefined methodtotal_pages' for Array:0xa2710a0` 得到这个错误

当我使用 'sort_by' 而不是 'order' 后尝试在我的艺术家控制器中分页时。有谁知道解决这个问题的方法?似乎您不能以这种方式使用分页,因为@artists 变成了一个数组而不是一个活动的记录集合?任何建议表示赞赏

澄清我对这 3 个参数使用的是 sort_by 而不是 .order,因为它们调用的是我的模型中的函数,而不是我的 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:不,它仍然无法正常工作

编辑 3:尝试做 'require 'will_paginate/array'' 但没有解决它。

【问题讨论】:

  • 难道没有办法使用.order 而不是.sort-by 来获得您想要的其他类型吗?例如,@artists = Artist.order(numReviews: :desc).paginate(:page =&gt; params[:page])
  • @lurker 我不这么认为,因为这些是对艺术家/音乐会模型中的函数的调用,而不是艺术家数据库表中的列。

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


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 2019-08-28
    • 2021-07-26
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    相关资源
    最近更新 更多