Сортировка элементов модели в зависимости от ассоциации habtm - PullRequest
0 голосов
/ 29 декабря 2011

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

1 Ответ

0 голосов
/ 29 декабря 2011

Один простой и относительно эффективный способ сделать это - добавить кеш счетчика к вашей Attachment модели. Кэш счетчика будет хранить и обновлять количество связей в столбце вашей таблицы attachments, чтобы вы могли сделать Attachment.order( 'user_attachments_count DESC' ).

К сожалению, HABTM не поддерживает кеш счетчика, поэтому вам нужно будет вывести модель «посредника» между двумя другими, чтобы получить доступ к таблице соединений.

Другой способ (но с низкой производительностью) - просто использовать:

 @attachments = Attachment.includes(:users)
 @sorted      = @attachments.sort_by {|r| r.to_a.size }.reverse!

Ну, если он не подходит, вы всегда можете начать потоотделение по SQL-запросу ...

...