在'has_many'中,如何先将字段排序为非空,然后按值排序?

时间:2017-11-30 22:12:48

标签: ruby-on-rails ruby activerecord

例如,如果你有:

has_many :certs, -> { order cert_date: :desc }, :dependent => destroy

我希望null cert_dates是返回的第一个条目,然后让cert_dates按降序返回。

相当于sql查询:

select * from certs order by cert_date is not null, cert_date desc;

1 个答案:

答案 0 :(得分:1)

正如你在sql中所写的那样:

has_many :certs, -> { order('cert_date is not null, cert_date desc') }

如果你使用postgres,它可以做得更干净(虽然不确定MySQL):

has_many :certs, -> { order('cert_date desc nulls first') }