【问题标题】: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,它会返回一个按您要求排序的数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-25
      • 2011-01-04
      • 2019-07-15
      • 1970-01-01
      • 1970-01-01
      • 2019-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多