根据多个属性订购商品

时间:2017-02-05 17:12:03

标签: ruby-on-rails

我的模型ticket具有prioritystatustarget_date

属性

我想按照priority的升序和target_date的升序列出门票,并从status未解决的门票开始#34;

我该怎么做?

priority可以包含值P1,P2和P3。

status可以"创建","进行中"或"已解决"

2 个答案:

答案 0 :(得分:0)

您可以将 case 语句用于状态,并将其与 order 方法中的 priority target_date 混合使用。

范围可能如下所示:

scope :ordered_by_status_priority_target_date, -> {
    order("case status
           when 'resolved' then 2
           else 1
           end, priority, target_date")
}

答案 1 :(得分:0)

这就是你要搜索的内容。

 Ticket.where.not(status: :resolved).order(priority: :asc, target_date: :desc)

或者您可以省略第一个实例上的asc并默认将其排序为优先级的asc,这将是

  Ticket.where.not(status: :resolved).order(:priority, target_date: :desc)