Rails 3 множественный default_scope буквенно-цифровой
У меня в таблице есть столбцы, которые являются кодами. Они в формате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, но позиция не всегда установлена.
РЕДАКТИРОВАТЬ 2: Я вероятно должен упомянуть, что эта сортировка должна быть сделана на default_scope, поэтому, когда я обращаюсь к Object.all, они по умолчанию сортируются таким образом.
Спасибо за вашу помощь!
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"]