-1

У меня есть модели с именами вложений и пользователями, связанными с has_and_belongs_to_many. теперь я должен найти все вложения, отсортированные таким образом, чтобы вложения, имеющие ассоциацию, будут отображаться первыми, а затем те, у которых нет связи. Как я могу это сделать?Сортировка элементов модели в зависимости от ассоциации habtm

+0

Re- фразу ваш вопрос. Неясно, чего вы хотите. –

ответ

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 ...