Сортировка массива по идентификационному номеру - PullRequest
0 голосов
/ 23 февраля 2011

В моей базе данных есть "номера позвоночника", и я хочу отсортировать их по ним.

@films = Film.all.sort{|a,b| a.id <=> b.id }

Это мой единственный контроллер, но позвоночники идут 1, 2, 3 ... 100, 101 и т. Д.вместо 001,002,003 ... так что сортировка не в порядке.Вероятно, есть простой класс для такого типа:

@films = Film.all.sort{|a,b| a.id.abs <=> b.id.abs }

Но я этого не знаю.Спасибо за помощь.

PS также, почему вики рельсов так часто отключались в последнее время?

1 Ответ

4 голосов
/ 23 февраля 2011

Вы должны использовать Film.order ("id DESC") (или "ASC") метод, который применяет предложение SQL ORDER BY к запросу.По умолчанию записи сортируются по столбцу первичного ключа, по крайней мере, в MySQL.

Если это не ответило на ваш вопрос, предоставьте дополнительную информацию о вашей базе данных.

Отредактировано Да, я вижу.Единственное, что приходит на ум, это то, что вы используете какой-то тип данных строки для столбца номеров позвоночника.В этом случае подобный тип сортировки имеет смысл, поскольку значения сравниваются в алфавитном порядке с символами типа

1| |
0|5|4
2|5|
1|4|3

, которые будут возвращать

  • 054
  • 1
  • 143
  • 25

, тогда как числовые значения, такие как целое число или число с плавающей запятой, сравниваются по их фактическому значению, а не по отдельным байтам.

Итак, вы должны создать миграцию, чтобы изменить тип данных вашего позвоночника на целое число.

...