Если вы посмотрите в журнал запросов, вы увидите что-то вроде:
select count(labels.id) as count_id ...
Комбинация вашего вызова group
(с любым аргументом) и вызова count(:id)
заставляет ActiveRecord добавитьпсевдоним столбца count_id
для запроса.Я не думаю, что это задокументировано или указано где-либо (по крайней мере, я могу найти), но вы можете увидеть, что это произойдет, если вы достаточно смелы, чтобы пройти через источник Active Record.
В общем, если выдобавьте GROUP BY, а затем count(:x)
, Active Record добавит псевдоним count_x
.Там нет столбца для этого, так что вы не можете сказать order(:count_id)
, order(count_id: :desc)
, или любой из других распространенных нестроковых альтернатив.AFAIK, вы должны использовать строку, но вы можете обернуть ее в Arel.sql
, чтобы предотвратить будущие проблемы с устареванием:
Label.joins(:issues)
.group(:name)
.order(Arel.sql('count_id desc'))
.count(:id)
.take(10)
Нет никаких гарантий по этому поводу, поэтому, если вы ее используете, вы должны включить что-то в свойнабор тестов для выявления любых проблем, если поведение изменится в будущем.