Сортировка объектов activerecord в Rails 3 - PullRequest
0 голосов
/ 23 декабря 2010

У меня есть модель поста, которая имеет статус__. Я хочу отсортировать объекты, в которых объекты с Post.status.description == «в процессе» идут первыми, за ними следуют объекты со статусом «в ожидании», затем «активный», каждый из которых отсортирован внутри Post.created_at. Любые идеи о том, как можно это сделать, будут высоко оценены.

Одна морщина: я пытаюсь сделать эту работу с нумерацией страниц следующим образом:

posts.paginate(:page => page, :per_page=>10, :order=>"#{sort_by} #{direction}")

Так что, к сожалению, похоже, что мне придется вписать логику в параметр порядка.

Спасибо

1 Ответ

0 голосов
/ 23 декабря 2010

Лучше всего реорганизовать статусы в доменную таблицу с атрибутом сортировки. Затем вы можете присоединиться к сообщениям в статусах и сортировать по statuses.sort_order.

Если вы не хотите этого делать и не возражаете смешивать в небольшом sql, вы можете использовать выражение case, например:

:order => "case when status = 'in process' then 1 when status = 'pending' then 2 else 3 end, created_at, created_at"

Это работает на MySQL; проверьте вашу базу данных для точного синтаксиса. Может быть снижение производительности на очень больших таблицах, хотя, возможно, минимальное, если статус проиндексирован.

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