Ruby on rails Rails 3多个默认范围字母数字
我的表中有一列是代码。它们的格式是Ruby on rails Rails 3多个默认范围字母数字,ruby-on-rails,default-scope,Ruby On Rails,Default Scope,我的表中有一列是代码。它们的格式是 AAA-XXXX-YYY其中 AAA按字母顺序排列 XXX是数字 YYY是数字 我想在AAA上使用字母排序,然后在XXXX上使用数字排序,然后在YYY上使用数字排序作为我的默认范围,所以当我索引它们时,它们是这样排序的 如果我对列进行字母数字排序,我将得到以下结果: AAA-1000-1 AAA-1000-111 AAA-1000-2 BB-1000-12 BBB-1000-1 BCA-1000-1 C-1000-12 但使用数字排序,111大于2 编辑
AAA-XXXX-YYY
其中
按字母顺序排列AAA
是数字XXX
是数字YYY
AAA
上使用字母排序,然后在XXXX
上使用数字排序,然后在YYY
上使用数字排序作为我的默认范围,所以当我索引它们时,它们是这样排序的
如果我对列进行字母数字排序,我将得到以下结果:
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子字符串,但位置并不总是设置好的
EDIT2:我可能应该提到,这种排序需要在默认的_作用域上进行,所以当我访问对象时,它们默认都是这样排序的
谢谢你的帮助 对于基于mysql中的子字符串的表排序,我如何使其在默认的\u范围内运行。我如何让第一部分按字母数字排序。意思如下:A、AA、BBB、C、D1、D1A、DA、DB3、DBB也是一个后续,先按中间部分排序,然后按第一部分排序,再按第三部分排序如何?提前谢谢!
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"]