加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何在对数组进行排序后对其进行分页?

发布时间:2020-12-17 03:05:26 所属栏目:百科 来源:网络整理
导读:我有一个控制器方法,通过派生属性对元素进行排序.只要我不尝试分页,我就可以打印到视图.当我调用@foos = @ foos.page params [:page]时,我收到以下错误:# Array:...的未定义方法’page’ 谁能在这里提供一些指导?谢谢. 这是整个控制器方法: def index_b
我有一个控制器方法,通过派生属性对元素进行排序.只要我不尝试分页,我就可以打印到视图.当我调用@foos = @ foos.page params [:page]时,我收到以下错误:#< Array:...>的未定义方法’page’

谁能在这里提供一些指导?谢谢.

这是整个控制器方法:

def index_by_capacity
    if current_user.is_view_major?
      @foos = Foo.major_attr(:name)
    else
      @foos = Foo.order(:name)
    end


  @foos = @foos.sort_by! {|a| a.capacity_available.to_i }
  @total_foos = @foos.count

  @foos = @foos.page params[:page]

  respond_to do |format|
    format.html
    format.json { render json: @foos }
  end
end

解决方法

> .sort_by!方法返回一个没有方法页面的数组(无法对ruby数组进行分页,你必须自己实现它或使用外部库).
>分页适用于ActiveRecord :: Relation对象,由.where或.order等查询返回
>在您的情况下,您应该在DB级别执行订单(比通过Ruby进行排序更快):

@foos.order(:capacity_available)

>如果capacity_available属性是String(不是Integer),则可以将其作为INT进行CAST:

@foos.order('CAST(capacity_available AS INT) ASC')

(您可能需要编辑CAST()函数,它应该适用于PostGreSQL,不确定MySQL)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读