首页 > 解决方案 > Ruby on rails order_by 两个属性

问题描述

我有一个表,在这个表中我需要完成的属性,如果它的 null 是第一个,但同时我希望到期日期按 asc 排序

def all_cases
    @cases=Case.order("finished ASC NULLS FIRST").order(due_date: :asc).paginate(page: params[:page], per_page: 20) 

    if params[:search]
      @search_term = params[:search]
      @cases = Case.order("finished ASC NULLS FIRST").order(due_date: :asc).casesearch_by(@search_term).paginate(page: params[:page], per_page: 20) 
    else
      @cases = Case.order("finished ASC NULLS FIRST").order(due_date: :asc).order(sort_columnn + " " + sort_direction).paginate(page: params[:page], per_page: 20) 
    end
  end

此代码将完成的空值添加为第一个但未对到期日期进行排序

提前致谢

标签: ruby-on-railsruby-on-rails-4attributessql-order-byassociations

解决方案


取决于你想要什么,
Case.order("finished IS NOT NULL").order(due_date: :asc)
这行代码将首先按due_date排序,而不是按finished属性排序,
所以在你得到的记录前面将是finished为null的记录。

Case.order(due_date: :asc).order("finished IS NOT NULL")
这行代码将首先按完成属性排序而不是按到期日期排序,
因此在您获得的记录前面将记录哪个到期日期更小。


推荐阅读