У меня есть модели с именами вложений и пользователями, связанными с has_and_belongs_to_many. теперь я должен найти все вложения, отсортированные таким образом, чтобы вложения, имеющие ассоциацию, будут отображаться первыми, а затем те, у которых нет связи. Как я могу это сделать?Сортировка элементов модели в зависимости от ассоциации habtm
-1
A
ответ
0
Один простой и относительно эффективный способ сделать это - добавить counter cache в вашу модель Attachment
. Кэш-счетчик будет хранить и поддерживать актуальное количество ассоциаций в столбце таблицы attachments
, поэтому вы можете сделать Attachment.order('user_attachments_count DESC')
.
К сожалению, HABTM не поддерживает счетчик кеша, поэтому вам нужно будет отобразить модель «среднего человека» между двумя другими, чтобы получить доступ к таблице соединений.
Другой способ (но с плохой работой) заключается просто в использовании:
@attachments = Attachment.includes(:users)
@sorted = @attachments.sort_by {|r| r.to_a.size }.reverse!
Ну, если это не подходит, вы всегда можете начать потеть над запросом SQL ...
Re- фразу ваш вопрос. Неясно, чего вы хотите. –