【发布时间】:2016-05-04 08:18:12
【问题描述】:
个人资料可以创建帖子。 个人资料可以对帖子发表评论。 权重:post = 1,comment = 1。
我需要根据上个月内帖子、cmets 的综合权重列出人员。
我尝试过的是:
profiles = Profile.find(:all, :include => [:posts, :comments], :conditions => ["posts.created_at > ? or comments.created_at > ?", 1.month.ago, 1.month.ago], :group => "profiles.id", :group => 'profiles.id, posts.id, comments.id', :limit => 5)
和
sql = "SELECT DISTINCT profiles.id, count(posts.id) + count(comments.id) as pcount FROM profiles LEFT OUTER JOIN posts ON posts.profile_id = profiles.id LEFT OUTER JOIN comments ON comments.profile_id = profiles.id WHERE (posts.created_at > '#{1.month.ago}' and posts or comments.created_at > '#{1.month.ago}') GROUP BY profiles.id Order by pcount"
profiles = ActiveRecord::Base.connection.execute(sql)
【问题讨论】:
-
您的个人资料表中可以有两个属性,:cmets_count & :posts_count,并且每次用户写帖子或评论时,您可以使用 Rails 回调来增加这些值。
-
在这种情况下,我们无法读取发布或评论的时间。我需要最近一个月的顶级贡献者名单。
标签: ruby-on-rails rails-postgresql