при выполнении подсчета ActiveRecord :: Base как упорядочить по счетчику? - PullRequest
1 голос
/ 17 ноября 2010

пример будет ...

Pets.find(:all, :select => 'count(*) count, pet_type', :group => 'pet_type', :order => 'count')

возвращает правильные результаты, но не фактические значения в возвращенном упорядоченном хеш-объекте.

Pets.count(:all, :group => 'pet_type')

возвращает счетчик, но не сортирует по убыванию ... как бы я это сделал?

Я думаю, что предпочел бы использовать .find ... но я возьму .count, если смогу его отсортировать.

Ответы [ 4 ]

3 голосов
/ 17 ноября 2010
Pets.find(:all, :select => '*, count(*) AS count, pet_type', :group => 'pet_type', :order => 'count')
0 голосов
/ 07 января 2012
@pets=Pets.include(:meals_per_days).sort do |a,b| 
  a.meals_per_days.size <=> b.meals_per_days.size
end

Примечание. Будет возвращен массив записей, а не ActiveRecord: Relation.

Примечание2: Используйте размер, а не счетчик, так как count будет выполнять вызовы sql для БД.

0 голосов
/ 17 ноября 2010

Это прекрасно работает с MySQL, но может плохо переноситься, если вы переключаете БД:

Pets.count(:all, :group => 'pet_type', :order => 'count(*) DESC')
0 голосов
/ 17 ноября 2010
Pets.find(:all, :select => 'count(*) count, pet_type', :group => 'pet_type', :order => 'count DESC')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...