Sql Rails活动记录按列和的顺序排列
所以我有两个模型帖子和主题Sql Rails活动记录按列和的顺序排列,sql,ruby-on-rails,ruby,activerecord,Sql,Ruby On Rails,Ruby,Activerecord,所以我有两个模型帖子和主题 帖子有“浏览”的数量 帖子有一个主题 在这里,我想获得最多的视图主题,并将其排序为DESC(视图的最高总视图) 使用rails活动记录标记了该主题的所有帖子。以下是我当前尝试执行的代码,但它不正确:- class Topic < ApplicationRecord has_many :posts scope :ordered, -> { joins(:posts).order("sum(posts.viewed) DESC").limi
- 帖子有“浏览”的数量李>
- 帖子有一个主题李>
DESC
(视图的最高总视图)
使用rails活动记录标记了该主题的所有帖子。以下是我当前尝试执行的代码,但它不正确:-
class Topic < ApplicationRecord
has_many :posts
scope :ordered, -> {
joins(:posts).order("sum(posts.viewed) DESC").limit(2).uniq
}
end
类主题{
连接(:posts).order(“sum(posts.view)DESC”).limit(2).uniq
}
结束
按和求和是一种错误的模式
我建议您在Topic.rb中添加一个total\u views:integer
列,并在post.views总数发生变化时进行更新
当子帖子的viewsed
值增加时,您可以调用回调来自动更新total\u 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
Topic.rb:
def update_total_views
update_column :total_views, (posts.map(&:viewed).sum)
end
在控制器中,您可以调用
Topic.all.order(total\u views::desc)
您需要对主题进行分组\u id
class Topic < ApplicationRecord
has_many :posts
scope :ordered, -> {
joins(:posts).group("topics.id").order('SUM(posts.viewed) desc').limit(2).uniq
}
end
类主题{
联接(:posts).group(“topics.id”).order('SUM(posts.view)desc').limit(2).uniq
}
结束
这将起作用您可能需要通过
posts.id
或类似的方式进行分组。