Если вы хотите отсортировать в 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
.