我有一个用户模型,用户的关系是 has_many pets。我希望能够编写一个 ActiveRecord 查询,我可以在其中选择所有用户的宠物没有“蓬松”的 pet.name
使用 ActiveRecord 编写这个最有效的方法是什么?使用直接 SQL,它看起来如下所示:
select id from users INNER JOIN pets ON u.id = pets.user_id WHERE pets.name != "fluffy"
我有一个用户模型,用户的关系是 has_many pets。我希望能够编写一个 ActiveRecord 查询,我可以在其中选择所有用户的宠物没有“蓬松”的 pet.name
使用 ActiveRecord 编写这个最有效的方法是什么?使用直接 SQL,它看起来如下所示:
select id from users INNER JOIN pets ON u.id = pets.user_id WHERE pets.name != "fluffy"
在 rails 4 中,您可以更清楚地说明这一点:
User.joins(:pets).where.not(pets: { name: 'fluffy' })
没有 SQL 注入漏洞的最干净的方法是使用查询参数:
User.joins(:pets).where("pets.name != ?", "fluffy")
一些数据库驱动程序将利用上述准备好的语句来重用数据库查询计划。在这种情况下,只有参数值变化时,数据库不必再次分析查询。