我希望创建一种方法来对用户发布的主题进行排名。我现在正在使用它:
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
答案 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在数据库上的成本要低得多,而不是试图动态计算每个主题的评论数量