我有一個名為后(表模型posts),它有一個模式叫用戶(表中的關系users),這是因為中郵模式“上傳”參考(職位表中有一個名為列uploader_id這是id該表的用戶) . 一個用戶可以有很多帖子,其中一些可以洗掉(通過 中的is_deleted布爾列標記posts)。
如何獲取包含帖子總數和已洗掉帖子數的用戶串列?
::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 是不夠的。
我在這方面嘗試了很多嘗試,但無論我做什么,我都無法弄清楚。它要么嘗試在 SQL 字串中插入“#<Arel::Nodes::Count:0x0000565...”作為文字,要么回傳 nils 陣列。
令我非常沮喪的是,如果我只想要帖子總數和用戶,這反而有效:
::Post
.joins(:uploader)
.group(:uploader)
.order(Arel.sql("count(*) desc"))
.limit(20)
.count
我只是不知道如何添加條件案例總和,我是 Rails 的新手,檔案沒有幫助。
uj5u.com熱心網友回復:
“如何獲取包含帖子總數和已洗掉帖子數的用戶串列?” 好像你在錯誤的方向上做這件事。最好開始,User因為您希望User回傳物件。
也 Post.arel_table[:is_deleted]并不是條件,這應該是Post.arel_table[:is_deleted].eq(1)或無論是在你的資料庫“真”。
請嘗試以下操作:
User.left_joins(:posts)
.select(
User.arel_table[Arel.star],
Post.arel_table[Arel.star].count.as('total_posts'),
Arel::Nodes::Case.new
.when(Post.arel_table[:is_deleted].eq(1)).then(1)
.else(0).sum.as('deleted_count'))
.group(:id)
.order(
Post.arel_table[Arel.star].count,
Arel::Nodes::Case.new
.when(Post.arel_table[:is_deleted].eq(1)).then(1)
.else(0).sum)
.limit(20)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/318293.html
