我想知道是否有一種方法可以使用排序順序的某種if/then
語義進行排序。有條件的order_by取決於太陽黑子中的數據
我想ADRESS的基本要求是:
- 我的記錄,有可能是一個
nil
時間contact_again_time屬性。 - 該列表應按照以下方式排序:確實有
contact_again_time
的所有記錄首先按contact_again_time
降序排列。 - 其中
contact_again_time
爲零的其餘位置應按照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索引中。
我寧可避免,因爲它感覺錯了。 sort=contact_again_time desc,created_at asc
每當contact_again_time
存在,它會按降序進行排序(並使用created_at
打破平局,這是無關緊要的給你):
這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – 2013-03-26 02:20:49
我已經更新了答案。 – arun 2013-03-26 04:45:47
我會說這幾乎就是我正在尋找的答案。我遇到的唯一問題是我現在需要按升序對第一個字段進行排序,所以在這種情況下,nil值會被排序,這會破壞:( – Tigraine 2013-03-26 09:50:24