Velvet Star Monitor

Standout celebrity highlights with iconic style.

general

Ruby on Rails ActiveRecord query using a join

Writer Matthew Harrington

I have a User model and the user has a relationship which is has_many pets. I want to be able to write an ActiveRecord query where I can select all users with a pet that doesn't have a pet.name of "fluffy"

What's the most efficient way to write this using ActiveRecord? Using straight SQL it would look something such as the following:

select id from users INNER JOIN pets ON u.id = pets.user_id WHERE pets.name != "fluffy"

3 Answers

This should work:

User.joins(:pets).where("pets.name != 'fluffy'")

Also you might want to read the following part (on joins) on the official RoR guidelines.

2

In rails 4 you can make this even more clear:

User.joins(:pets).where.not(pets: { name: 'fluffy' })

The cleanest way without SQL injection vulnerability is using query parameters:

User.joins(:pets).where("pets.name != ?", "fluffy")

Some database drivers will utilize prepared statements for above to reuse database query plan. In such case the database doesn't have to analyze query again when only param value varies.

0

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy