我有一个用户模型,并且用户有一个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