【发布时间】:2021-10-14 16:02:30
【问题描述】:
我有一个名为 Post(表 posts)的模型,它与名为 User(表 users)的模型有关系,在 Post 模型中被称为“上传者”(posts 表有一个列称为uploader_id,这是表用户的id)。一个用户可以有许多帖子,其中一些可以删除(通过posts 中的is_deleted 布尔列标记)。
如何获取包含帖子总数和已删除帖子数的用户列表?
::Post
.select(
Arel.star.count.as("total"),
Arel::Nodes::Case.new.when(Post.arel_table[:is_deleted]).then(1).sum.as("deleted_count"),
:uploader
)
.joins(:uploader)
.group(:uploader)
.order(:total, :deleted_count)
.limit(20)
这不起作用。我需要将用户作为模型返回,uploader_id 不够。
我已经尝试过很多次尝试,但无论我做什么,我都无法弄清楚。它要么尝试将“#<:nodes::count:0x0000565... sql nil>
让我非常沮丧的是,如果我只想要帖子总数和用户,这反而可行:
::Post
.joins(:uploader)
.group(:uploader)
.order(Arel.sql("count(*) desc"))
.limit(20)
.count
我只是不知道如何添加条件案例总和,我是 Rails 的新手,文档没有帮助。
【问题讨论】:
标签: ruby-on-rails ruby arel