檢查是否存在關聯
回答
你可以寫這樣的查詢:
User.includes(:car).where(cars: {user_id: nil})
我會建議它提取到一個範圍:
class User < ActiveRecord::Base
# ...
def self.without_car
includes(:car).where(cars: {user_id: nil})
end
end
然後,你可以簡單地寫
User.without_car
編輯
爲了澄清:在幕後,這個查詢會發出:
SELECT "users"."name" FROM "users"
LEFT OUTER JOIN "cars" ON "cars"."user_id" = "users"."id"
WHERE "cars"."user_id" IS NULL
的加入將導致一個空行的car.user_id
的,所以我們可以簡單的檢查,如果該行是NULL
(或者,從Active記錄的觀點,nil
)。
順便說一下,這也適用於has_many
關係,只需將參數更改爲includes
以複數形式。請注意,where
的參數總是需要複數,因爲它是表名。
是真的叫做範圍嗎? – devanand
@devanand我想這是一個歷史長大的名字,請參閱http://edgeguides.rubyonrails.org/active_record_querying.html#scopes –
可能downvoter如此善良,並解釋這是什麼問題?我想改善我的答案。 –
- 1. Rails 3檢查是否存在關聯
- 2. 如何檢查Rails中是否存在關聯對象?
- 3. 檢查關聯數組中是否存在鍵
- 4. 檢查Rails中是否存在關聯記錄?
- 5. SQL有效地檢查一個關聯是否存在?
- 6. 如何從模型中檢查ActiveRecord中是否存在關聯?
- 7. 檢查一個記錄是否存在於多關聯中
- 8. Rails:檢查has_many中是否存在關聯
- 9. 如何檢查是否關聯從零
- 10. 檢查用戶是否與m2m關聯
- 11. SparseArray,檢查是否存在關鍵
- 12. java neo4j檢查是否存在關係
- 13. 檢查是否存在M2M關係
- 14. 如何檢查行是否存在,以檢查Mysql聯盟?
- 15. 檢查值是否存在
- 16. 檢查NSURLCredential是否存在
- 17. 檢查URL是否存在
- 18. 檢查param是否存在
- 19. 檢查是否存在location.hash
- 20. 檢查包是否存在
- 21. 檢查表是否存在
- 22. PHP - 檢查是否存在
- 23. 檢查源是否存在
- 24. 檢查@ variable.method是否存在?
- 25. 檢查行是否存在
- 26. 檢查是否存在Jsoup
- 27. 檢查是否存在
- 28. 檢查[i]是否存在
- 29. 檢查是否存在webservice
- 30. 檢查Cookie是否存在?
你想檢查它在哪裏?在測試中,在驗證?你想實現什麼? –
@SimoneCarletti他們應該被驗證覆蓋,但仍然有案件,我試圖找出損壞 – London
如果你想檢查用戶是否有車,那麼'@ user.car.blank?'將返回true if用戶不擁有汽車。或者,如果你想獲得所有沒有車的用戶,那麼'User.where(id:Car.pluck(:user_id).uniq)' –