Rails Where Association Exist

Rails 查詢關聯是否存在的方法,可以使用新的 missing 與 associated API 來縮短程式碼長度

Rails Where Association Exist
Photo by Maxime Agnelli / Unsplash

我們時常會在 Rails 內撈取資料找有關聯或是還未關聯的資料,在寫法上我們通常都會使用 joins 搭配 where 使用。

例如:

class User
  has_one :account
end

User.left_joins(:account).where(account: { id: nil })
User.joins(:account).where.not(account: {id: nil})

這樣寫可以 work 不過就是有那麼一點長,最近發現了新的 where API 可以縮短這兩個的寫法,就是使用 missingassociated

我們就可以改寫成:

User.where.missing(:account) # rails 6 up only
User.where.associated(:account) # rails 7 up only

這樣是不是看起來簡單多了呢?