我想知道是否有一种方法可以使用某种if/then
语义进行排序。
我试图解决的基本要求是:
- 我的记录有一个 contact_again_time 时间属性,可以是
nil
. - 列表的排序方式应使所有具有
contact_again_time
优先顺序的记录按contact_again_time
降序排列。 - 其余
contact_again_time
为 nil 的位置应按 created_at 升序排序。
所以在我的脑海中,我可以通过将订单字段具体化到索引中来解决这个问题,让我searchable
看起来像这样:
integer :sort_key do
contact_again_time.nil? ? (created_at.to_i * -1) : contact_again_time.to_i
end
然后做一个order_by(:sort_key, :desc)
得到我想要的。但是通过这种方式,我将部分排序逻辑放在了我的模型中,更重要的是放在了 Lucene 索引中。
我宁愿避免的事情,因为它感觉很不对劲。