【发布时间】:2013-03-25 14:38:18
【问题描述】:
我想知道是否有一种方法可以使用某种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 索引中。
我宁愿避免的事情,因为它感觉很不对。
【问题讨论】:
标签: ruby-on-rails solr sunspot