Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 3多个默认范围字母数字_Ruby On Rails_Default Scope - Fatal编程技术网

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"]