簡體   English   中英

rails如何找到沒有相關記錄

[英]rails how to find with no associated records

我知道這將是一個簡單的問題,但我正在解決這個問題。

我有用戶可以有很多結果。 我正在嘗試找出如何將尚未獲得任何結果的用戶返回到@starters對象(來自控制器)。

@users = @event.entires

@starters = @users.where("results = ?", 0)

任何人都可以解釋我如何檢查用戶是否沒有結果?

最佳解決方案(正如MrYoshiji評論)

@starters = @users.includes(:results).where(results: { id: nil })

這將執行與我的第二個解決方案中的查詢相同的查詢。

其他SQL解決方案

你可以使用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

其他Ruby解決方案

@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM