我有一个Order模型,该模型具有以下属性:
submitted_date :date
completed_date :date
accepted_date :date
我使用以下代码块使用这些字段来确定订单状态:
def status
if completed_date.present?
"Fulfilled"
elsif accepted_date.present? && submitted_date.present? && completed_date.blank?
"Accepted"
elsif submitted_date.present? && accepted_date.blank? && completed_date.blank?
"Submitted"
else
"Open"
end
end
我在构建应用程序时将其完全隔开,但我没有意识到用户希望按以下顺序查看结果:
打开, 已提交, 公认, 已实现
我可能应该使用整数字段作为确定订单状态的枚举,但是我围绕上述结构建立了很多功能。
我想知道是否可以对查询进行排序,以便按上述任意顺序对结果进行排序?
答案 0 :(得分:1)
我认为以最完整的状态进行订购可以解决问题。未结订单的日期为零,因此应正确订购
Order.order(提交日期::desc,完成日期::desc,接受日期::desc)
玩:desc/:asc
选项和.reverse
应该可以解决问题。
对于另一次迭代,一种方法是拥有一个状态机,一个状态枚举列,每个步骤的日期。验证所需条件将使订单前进到下一步