Проблема заключалась в том, что я хотел подписаться на didFinishLaunchingWithOptions
, но в этот момент не все службы были настроены. Решение было подписаться в делегате didRegisterUserNotificationSettings
.
Если вам не нужен дополнительный столбец, вы всегда можете запросить дополнительный столбец в возвращаемом наборе результатов:
User.all(:select => "#{User.table_name}.*, COUNT(#{Photo.table_name}.id) number_of_photos",
:joins => :photos,
:order => "number_of_photos")
Это сгенерирует следующий SQL:
SELECT users.*, COUNT(photos.id) number_of_photos
FROM `users` INNER JOIN `photos` ON photos.user_id = users.id
ORDER BY number_of_photos
Если вы не хотите добавлять столбец кэша счетчика, единственный вариант - выполнить сортировку после поиска. Если вы : включите ассоциацию
в свою находку, вы не потребуете дополнительной работы с базой данных.
users = User.find(:all, :include => :photos).sort_by { |u| -u.photos.size }
Обратите внимание на знак минуса в блоке sort_by
для сортировки от большего к меньшему.
. Самый простой способ добиться этого, вероятно, - добавить к этой модели кэш счетчика, а затем выполнить сортировку по этому столбцу.
class Photo < ActiveRecord::Base
belongs_to :user, :counter_cache => true
end
И не забудьте добавить столбец в вашу таблицу users
под названием photos_count
.
Тогда вы сможете ...
User.find(:all, :order => 'photos_count')
Ваш вопрос не имеет смысла. Параметр : order
указывает имя столбца и необязательное направление упорядочения, например asc (окончание) или desc (окончание).
Какого результата вы пытаетесь достичь?
Кэш счетчика поможет, но вам понадобится дополнительный столбец в базе данных.