Вот одна из возможностей:
Like.where('created_at >= ?',Time.now - 1.day).where('likeable_type = ?','Photo').group('likeable_id').order('count_all DESC').count
Это создаст sql, который выглядит как (mysql):
SELECT COUNT(*) AS count_all,
likeable_id AS likeable_id
FROM `likes`
WHERE ( created_at >= '2011-11-24 20:43:19' )
AND ( likeable_type = 'Photo' )
GROUP BY likeable_id
ORDER BY count_all DESC
, и вы получите ActiveSupport :: OrderedHash, то есть {photo_id=> лайки, photo_id_2 => лайки} и т. д.
Если это не было полиморфным, а Лайк был "own_to: photo" - вы могли бы создать группу .group (: photo) и на самом деле иметь рельсы для созданияупорядоченный имеет {photo_object => likes} - но с полиморфной ассоциацией - вы не можете создать .group (: likeable), насколько мне известно, - поэтому вам придется перебрать хеш и выполнить Photo.find (photo_id_from_hash), что может быть не столь эффективным, в зависимости от того, сколько фотографий вам понравилось, поэтому вам, возможно, придется поиграться с этим списком идентификаторов - но, по крайней мере, вышеизложенное поможет вам получить этот список без особых усилий.