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