2012-12-17 48 views
0

我的表中有一列是代碼。他們是在 AAA-XXXX-YYY的格式,其中Rails 3多個default_scope字母數字

  • 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,但並不總是設置位置。

編輯2:我可能應該提及這種排序需要在default_scope上完成,所以當我訪問Object.all時,它們默認按這種方式排序。

感謝您的幫助!

+4

http://stackoverflow.com/questions/5480703/how-to-sort-an-alphanumeric-array-in-ruby – Unixmonkey

+0

http://stackoverflow.com/questions/4785424/how-to-基於MySQL中的子字符串進行表格排序的特定字符串部分排序 – mccannf

回答

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

如何在default_scope中運行該函數。我如何讓第一部分按照字母數字排序。含義如下:A,AA,BBB,C,D1,D1A,DA,DB3,DBB – user1910255

+0

另外還有一個跟進,如何按中間部分先排序,然後是第一部分,然後是第三部分?提前致謝! – user1910255