ActiveRecord: группировка по количеству связанных записей has_many - PullRequest
0 голосов
/ 05 января 2019

Учитывая, что у пользователя много свойств:

class User
  has_many :properties
end

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

Я не могу использовать счетчик кэша в модели User по причинам, которые выходят за рамки вопроса (запрос объединяет динамическую область свойств).

Чтобы было проще, пока у нас есть это:

`User.joins(:properties).group('users.email')
     .order('COUNT(properties.id) DESC').count`

Возвращает хэш, подобный следующему:

{
  "email1@gmail.com"=>209,
  "email2@gmail.com"=>160,
  "email3@gmail.com"=>160
}

Моя цель, основываясь на хэше предыдущего примера, в итоге получить хеш, подобный этому:

{
  209 => 1,
  160 => 2
}

Поскольку у нас был 1 пользователь с 209 свойствами и 2 пользователя с 160 свойствами.

Я уже достиг результата, используя .group_by в ruby, но цель - достичь его только с помощью ActiveRecord / SQL. Я не против запускать сырой SQL, если это необходимо.

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