1

我正在寻找一种方法来对用户发布的主题进行排名。我现在正在使用这个:

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")

我想知道如何将每个主题的评论数量添加到它。

主题.rb

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

评论.rb

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

用户.rb

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

1 回答 1

1

只需添加一个名为comments_counterTopic 模型的列,然后更改 comments.rb 以counter_cache: true包含belongs_to :topic关联

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

与尝试动态计算每个主题的评论数相比,counter_cache 在数据库上的成本要低得多,而且也不那么令人头疼

于 2013-07-29T22:49:01.300 回答