Сортировать по словарю хэш - PullRequest
       0

Сортировать по словарю хэш

0 голосов
/ 19 сентября 2011

Моя табличная модель выглядит следующим образом

модель NiceFile

name:string
file_type:integer

, тогда у меня есть словарь типа

{1=>'aaa', 2=>'bbb', 3=>'ccc'}

Как сортировать записи по этому словарю

1 Ответ

0 голосов
/ 19 сентября 2011

Если вы хотите отсортировать в Ruby, вы можете сделать что-то вроде этого:

ordering = {1=>'aaa', 2=>'bbb', 3=>'ccc'}
files    = NiceFile.where(...).sort_by { |n| ordering[n.file_type] }

where(...), конечно, просто заполнитель для любых вещей AR, которые вам нужно сделать, чтобы получить NiceFiles. Это будет хорошо работать до тех пор, пока ни одна из ваших операций с базой данных не заботится о порядке; на практике это означает, что обычно все будет хорошо, если вы не планируете использовать limit и offset, чтобы получить только часть результатов базы данных.

Если вам нужно использовать свой собственный порядок в базе данных, тогда вы захотите поместить свой хэш в таблицу (скажем, ordering_table), присоединиться к нему и упорядочить значения. Примерно так:

files = NiceFile.where(...).
                 joins('left join ordering_table on nice_file.file_type = ordering_table.file_type').
                 order('coalesce(nice_file.order_pos, 1000)').
                 limit(11)

coalesce и left join существуют, если у вас есть значения nice_file.file_type, которых нет в вашем ordering_table.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...