按created_at,赞和评论数排名主题

时间:2013-07-29 19:32:06

标签: ruby ruby-on-rails-3

我希望创建一种方法来对用户发布的主题进行排名。我现在正在使用它:

Topic.select("topics.*, (((topics.likes_count - 1) / POW(((EXTRACT(EPOCH FROM (now()-topics.created_at)) / 3600)::integer + 2), 1.5))) AS popularity").order("popularity DESC")

我想知道如何为每个主题添加评论数量。

topics.rb

has_many :comments, as: :commentable, dependent: :destroy
has_many :commenters, through: :comments

comments.rb

belongs_to :user
belongs_to :commentable, polymorphic: true, touch: true
belongs_to :commenter, class_name: 'User', foreign_key: :user_id

user.rb

has_many :comments, :dependent => :destroy
has_many :topics #destroyed via the UserDeletionService

1 个答案:

答案 0 :(得分:1)

只需在主题模型中添加名为comments_counter的列,然后将comments.rb更改为包含counter_cache: true关联的belongs_to :topic

此处有更多信息,请向下滚动至counter_cache:http://guides.rubyonrails.org/association_basics.html#belongs-to-association-reference

counter_cache在数据库上的成本要低得多,而不是试图动态计算每个主题的评论数量