rails活动记录按列和排序

gmol1639  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(277)

所以我有两个模型的帖子和主题
帖子的“浏览”次数。
帖子有一个主题。
在这里,我想得到最多的看法主题和秩序 DESC (使用rails活动记录的所有标记了该主题的帖子的最高总视图)。这是我目前的代码,我正在尝试做什么,但它是不正确的:-

class Topic < ApplicationRecord
  has_many :posts
  scope :ordered, -> {
    joins(:posts).order("sum(posts.viewed) DESC").limit(2).uniq
  }
end
oug3syen

oug3syen1#

你需要分组你的主题

class Topic < ApplicationRecord
 has_many :posts
 scope :ordered, -> {
 joins(:posts).group("topics.id").order('SUM(posts.viewed) desc').limit(2).uniq
 }
end

这就行了

92dk7w1h

92dk7w1h2#

以和为序来求和是一种不好的模式。
我建议你加一个 total_views:integer 列,并在post.views的总和更改时更新它。
当一个孩子 viewed 值增加时,可以调用回调来自动更新 total_views 列。
post.rb可以有如下内容:

after_create do
  topic.update_total_views
end
after_update do
  topic.update_total_views
end
after_destroy do
  topic.update_total_views
end

主题.rb:

def update_total_views
  update_column :total_views, (posts.map(&:viewed).sum)
end

在你的控制器里你可以打电话 Topic.all.order(total_views: :desc)

相关问题