Вы должны GROUP BY
все столбцы, которые вы выбираете в Postgres, или он будет злиться на вас. Есть ли простой/чистый способ сделать это, кроме простого перечисления всех столбцов?Rails Postgres GROUP все столбцы
Лучшее, что я придумал следующий (намерение комментируется):
# The purpose of this query is to return a list of `User`s
# ordered by the number of `Account`s they have in descending order.
User.joins(:accounts)
.group(User.full_column_names)
.order('COUNT("accounts".*) DESC')
От user.rb
:
def self.full_column_names
column_names.collect {|name| "\"#{table_name}\".\"#{name}\"" }
end
Уверены ли вы, что вы поняли использование метода activerecord group? Http://guides.rubyonrails.org/active_record_querying.html#group и 'postgresql group by clause' http://www.postgresqltutorial.com/ PostgreSQL-группа с помощью /? Группирование по всем столбцам в таблице не имеет смысла. –
Я делаю 'INNER JOIN' с таблицей' accounts', чтобы найти пользователей с наибольшим количеством учетных записей, поэтому я использую агрегатную функцию в своем предложении ORDER. По умолчанию Rails будет выбирать все столбцы из AR-модели, в этом случае пользователи SELECT «. * ...», которые я хочу, потому что ищу полные объекты 'User'. Это имеет смысл? Я мог бы пропустить совершенно простое решение, это только лучшее, что я придумал до сих пор. – Aaron