【问题标题】:Sort by two columns rails, but prioritize one if a field is nil?按两列rails排序,但如果字段为零则优先排序?
【发布时间】:2023-03-26 10:56:01
【问题描述】:
所以我有一个包含priority_n 列的表。假设该表中有 5 个项目。两个以nil为priority_n,另外三个在priority_n为1、2、3。
所以我想做一个 where(priority_n: nil).order(published_at: :desc) 结合 where.not(priority_n: nil).order(priority_n: :asc)。所以我希望在活动记录关系的开头有 nil ,然后是它们之后的优先级。有没有办法做到这一点?
【问题讨论】:
标签:
ruby-on-rails
sorting
activerecord
【解决方案1】:
我认为这样可以解决问题:
class MyModel
scope :with_priority, -> { where.not(priority: nil).reorder(:priority) }
scope :without_priority, -> { where(priority: nil).reorder(published_at: :desc) }
def self.special_order
without_priority.to_a + with_priority.to_a
end
end
现在,您可以调用:MyModel.special_order,它会返回一个按您要求排序的数组。