[英]rails how to find with no associated records
我知道這將是一個簡單的問題,但我正在解決這個問題。
我有用戶可以有很多結果。 我正在嘗試找出如何將尚未獲得任何結果的用戶返回到@starters對象(來自控制器)。
@users = @event.entires
@starters = @users.where("results = ?", 0)
任何人都可以解釋我如何檢查用戶是否沒有結果?
@starters = @users.includes(:results).where(results: { id: nil })
這將執行與我的第二個解決方案中的查詢相同的查詢。
你可以使用LEFT OUTER JOIN
。 這樣,你將始終擁有“左”表( users
)的所有結果,但是你也會有“右”表( results
)的匹配記錄,盡管有非,這將留下你可以使用的空字段校驗。
@starters = @users.joins("LEFT OUTER JOIN results ON results.user_id = users.id").where("results.user_id IS NULL")
在您的情況下,使用“用戶”模型的名稱替換users
。
@starters = @users.select { |u| !!u.results }
在這!!
將強制轉換為布爾值,如果沒有results
,則u.results
將返回[]
(空數組)。 並且!![]
等於true
。
嘗試左連接並找到哪一個為空
@users.joins("LEFT OUTER JOIN user ON user.id = result.user_id").where("result.id IS NULL")
如果您的@users
是一個數組,請嘗試:
@starters = @users.select { |u| u.results.empty? }
這應該讓所有沒有任何結果的用戶:
@starters = ActiveRecord::Base.execute("select * from users where id not in (select user_id from results)")
另一種方法是:
User.where("id not in ?", "(select user_id from results)")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.