Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Rails活动记录按列和的顺序排列_Sql_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

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
或类似的方式进行分组。