我对 rails 和 sql 都比较陌生。我在生产环境中使用 postgres。
我有一个 Like
模型,通过多态性,它有属性 likeable_type
和 likeable_id
,这就是我的 Photo 中的项目
模型被用户“喜欢”。当喜欢的对象将 Photo
作为 likeable_type
并且照片的 id 为likeable_id
。
我的问题:我希望能够获得过去 24 小时内点赞次数最多的照片列表,按顺序将最喜欢的放在顶部,最不喜欢的放在底部。我该怎么做?
到目前为止我知道我的代码应该是这样的
likes = Like.find(:all, :conditions => { :created_at => 1.days.ago.utc...Time.now.utc, :likeable_type => "Photo" })
likes = likes.group( --- something here --- , SUM( --- something here --- ))
但我不太清楚正确的语法应该是什么。
非常感谢任何帮助!
最佳答案
假设您有以下内容:
class Photo < AR::Base
has_many :likes, :as => :likeable
end
class Like < AR::Base
belongs_to :likeable, :polymorphic => true
end
尝试:
@photos = Photo.select("photos.*, count(likes.id) AS likes_count").joins(:likes).where('likes.created_at > ?', 1.day.ago).group('photos.id').order('likes_count DESC')
这还允许您访问每张照片的赞数:
@photo.first[:likes_count] # => 4
关于mysql - 如何获得一组记录的总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8079286/