我有一個用戶模型,並且用戶有一個has_many寵物的關係。我想能夠寫一個ActiveRecord查詢,我可以選擇所有用戶沒有pet.name的「蓬鬆」的寵物Ruby on Rails使用連接的ActiveRecord查詢
什麼是最有效的方式來寫這個使用ActiveRecord?使用直接的SQL情況就會如下列:
select id from users INNER JOIN pets ON u.id = pets.user_id WHERE pets.name != "fluffy"
我有一個用戶模型,並且用戶有一個has_many寵物的關係。我想能夠寫一個ActiveRecord查詢,我可以選擇所有用戶沒有pet.name的「蓬鬆」的寵物Ruby on Rails使用連接的ActiveRecord查詢
什麼是最有效的方式來寫這個使用ActiveRecord?使用直接的SQL情況就會如下列:
select id from users INNER JOIN pets ON u.id = pets.user_id WHERE pets.name != "fluffy"
不存在SQL注入漏洞最乾淨的方法是使用查詢參數:
User.joins(:pets).where("pets.name != ?", "fluffy")
有些數據庫驅動程序將利用上述準備好的發言重用數據庫查詢計劃。在這種情況下,只有參數值變化時,數據庫不必再次分析查詢。
在軌道4可以讓這個更清楚:
User.joins(:pets).where.not(pets: { name: 'fluffy' })
請糾正我,如果我錯了,但它不會是「User.joins(:PET)......」 - 奇 - 爲符號參數? – jeffdill2
@ jeffdill2這取決於關聯是如何定義的。例如,如果用戶'has_one:pet',你會是對的。 –
@MikeC啊,對。 – jeffdill2