Rails中的PostgreSQL:按降序排列两个日期属性对象

时间:2016-02-23 18:12:14

标签: ruby-on-rails ruby postgresql sorting activerecord

我有一份活跃的工作岗位索引。目前,他们按最新的created_at进行排序。不过,最近我添加了续订功能,更新renewal_date属性而不更新created_at

我想要实现的是使用renewal_datecreated_at按降序对列表进行排序。

jobs = Job.where(active: true).reorder("renewal_date DESC NULLS LAST", "created_at DESC")

使用此代码,无论创建了多少个新作业,更新的作业将始终位于顶部。如何对其进行排序,以便检查两个属性的日期并根据最近的属性对其进行排序?

2 个答案:

答案 0 :(得分:3)

您的代码将首先通过renewal_date订购,最后使用空值,然后如果两个记录具有相同的renewal_date,则会查看created_at。

我认为您想要做的事情就像" max(renewal_date,created_at)"这将采用"最后修改日期"或其他自定义方式进行比较这两个领域。 如果那时,您可以在此处找到答案:drop down

Job.where(active: true).reorder('GREATEST(renewal_date, created_at) DESC')

答案 1 :(得分:1)

尝试使用标准SQL,因此它可以适用于所有类型的数据库:

Job.where(active: true).order('CASE WHEN renewal_date IS NULL THEN created_at ELSE renewal_date END DESC')