【问题标题】:Ruby on rails order_by two attributesRuby on rails order_by 两个属性
【发布时间】:2021-01-14 05:38:53
【问题描述】:

我有一个表,在这个表中我需要完成的属性,如果它的 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-rails ruby-on-rails-4 attributes sql-order-by associations


    【解决方案1】:

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

    Case.order(due_date: :asc).order("finished IS NOT NULL")
    这行代码将先按完成属性排序,然后按到期日期排序,
    所以在你得到的记录前面会记录哪个到期日更小。

    【讨论】:

    • 我想要的是表格的顺序是due_date: :asc 并且完成的真实案例总是在底部
    • Case.order(due_date: :asc).order("finished IS NOT NULL") 这很好,但我希望成品在底部而不是底部
    • order('finished = true desc') 可能有用
    • 试试Case.order(due_date: :asc).order("finished IS NULL")
    • 我希望完成后的 =true 先升序
    猜你喜欢
    • 2014-04-14
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    相关资源
    最近更新 更多