【问题标题】:Rails 3 multiple default_scope alphanumericRails 3 多个 default_scope 字母数字
【发布时间】:2012-12-17 14:42:48
【问题描述】:

我的表格中有一个列是代码。它们的格式为 AAA-XXXX-YYY在哪里

  • AAA 按字母顺序排列
  • XXX 是数字
  • YYY 是数字

我想在AAA 上使用字母排序,然后在XXXX 上使用数字排序,然后在YYY 上使用数字排序作为我的default_scope,所以当我索引它们时,它们会像这样排序。

如果我对列进行字母数字排序,我会得到以下结果:

AAA-1000-1
AAA-1000-111
AAA-1000-2
BB-1000-12
BBB-1000-1
BCA-1000-1
C-1000-12

但 111 使用数字排序大于 2。

编辑:AAA 的长度不固定。所以它可能是“AA”或“BBBB”或“CCC”。已经提到使用 SQL SUBSTRING,但位置并不总是设置。

EDIT2:我可能应该提到这种排序需要在 default_scope 上完成,所以当我访问 Object.all 时,它们默认以这种方式排序。

感谢您的帮助!

【问题讨论】:

标签: ruby-on-rails default-scope


【解决方案1】:
arr = ['AAA-1000-1','AAA-1000-111','AAA-1000-2','E-3-3','E-2-3','CCCC-2-45']

arr.sort_by {|elm| "%10s%10i%10i" % elm.split('-') }

=> ["E-2-3", "E-3-3", "AAA-1000-1", "AAA-1000-2", "AAA-1000-111", "CCCC-2-45"] 

【讨论】:

  • 如何让它在 default_scope 中运行。以及如何让第一部分按字母数字排序。含义如下:A、AA、BBB、C、D1、D1A、DA、DB3、DBB
  • 还有一个后续,先按中间部分排序,然后是第一部分,然后是第三部分?提前致谢!
猜你喜欢
  • 2011-02-03
  • 1970-01-01
  • 2019-08-05
  • 2016-11-24
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
  • 2010-12-22
  • 1970-01-01
相关资源
最近更新 更多