organization.users.select("tags.name, users.id").
distinct.joins(roles: [:tags]).merge(Role.active).merge(Tag.interest)
.group_by(&:name).map do |interest, users|
{interest => users.map{ |u| User.find(u.id) }}
end
=> {Футбол: [User1, User2, Пользователь3 ...], ..}
Как достичь этого, используя только активную запись-опрос? Группировка, которую я сделал выше с ruby, является полностью неэффективной, поскольку она запрашивает базу данных снова для каждого пользователя, но выполняет эту работу.Активная запись группировка
Я также пытался добиться его только активной записи запросов вроде:
organization.users.select("tags.name, users.id").
distinct.joins(roles: [:tags]).merge(Role.active).merge(Tag.interest).group("tags.name")
Но это дает мне
PG::GroupingError: ERROR: column "users.id" must appear in the GROUP BY clause or be used in an aggregate function
привет, вы можете остановиться на том, что запрос именно вы пытаетесь достичь, а также то, что [: теги], Role.active, Tag.interest –
Я хочу, чтобы пользователи, сгруппированных по процентным тегах. Результат подобен указанному хешу с {"interest": [массив пользовательских объектов]}. – Machiaweliczny