【问题标题】:ActiveRecord - Order by alphabet first then follow by numberActiveRecord - 先按字母排序,然后按数字排序
【发布时间】:2018-10-13 17:43:02
【问题描述】:

假设我有一个集合产品,其“名称”具有以下值:

  • 很棒的运动鞋
  • 无聊的伞
  • 420 个产品

以下代码:

@products.reorder('name ASC') # I really need to use reorder in my code

将按原样列出结果:

  • 420 个产品
  • 很棒的运动鞋
  • 无聊的伞

我应该在reorder() 中进行哪些调整以达到以下顺序:

  • 很棒的运动鞋
  • 无聊的伞
  • 420个产品

【问题讨论】:

标签: ruby-on-rails


【解决方案1】:
@products.reorder("(name ~ '^[0-9]'), name")

说明: FALSE 在 TRUE 之前排序,因此数字值将位于最后。

【讨论】:

    【解决方案2】:
    @products.reorder("(name !~* '^[a-z]'), name")
    

    【讨论】:

    • 你用的是什么数据库?
    • 我使用 Postgresql
    • 我更新了我的答案。 RLIKE 应该可以工作。我添加了另一个替代正则表达式匹配器
    • @products.to_sql => "SELECT \"products\".* FROM \"products\" WHERE \"products\".\"active\" = TRUE ORDER BY (name ~ '^[a-z]'), name" 第一个结果:“500g Dairy Free Hemp Chocolate”
    • 好的,我错过了不区分大小写的否定匹配。正如@Oleksii Baidan 所说,FALSE 排在TRUE 之前。
    猜你喜欢
    • 2013-06-29
    • 1970-01-01
    • 2020-09-03
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多