ruby-on-rails - Rails 中的 PostgreSQL : sorting object by two date attributes in descending order

标签 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")

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

最佳答案

您的代码将首先按 renewal_date 排序,末尾为空值,然后如果两条记录具有相同的 renewal_date,则查看 created_at。

我假设您想要做的是类似于“max(renewal_date, created_at)”的操作,它将采用“最后修改日期”或另一种自定义方式来比较这两个字段。 如果是这样,您可以在这里找到答案:merge and order two columns in the same model

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

关于ruby-on-rails - Rails 中的 PostgreSQL : sorting object by two date attributes in descending order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35585081/

相关文章:

ruby-on-rails - 如何: Get version image dimensions carrierwave

ruby-on-rails - 点击时渲染部分

ruby-on-rails - Sinatra 的 ActiveAdmin 替代品

ruby-on-rails - Ruby 的 range step 方法导致执行速度很慢?

javascript - Ember Fixture Adapter 未设置记录 ID

ruby-on-rails - 如何将 <%= link_to 转换为 "Upgrade"、 :settings, :class => "button" %> to a block in Rails 3?

ruby - 从 xml 名称值转换为简单哈希

SQL 计算连接表上的唯一真值

sql - 日期范围之间的字段值

postgresql - Postgres - BDR 复制 - auto_increment 主键的问题