DEV Community

n350071πŸ‡―πŸ‡΅
n350071πŸ‡―πŸ‡΅

Posted on

Rails where('n > ?', m) without sql

πŸ˜… SQL Way

User.where('age > ?' age)
Enter fullscreen mode Exit fullscreen mode

πŸ˜† ORM Way

User.where(User.arel_table[:age].gt(age))
Enter fullscreen mode Exit fullscreen mode

You can also use these methods.

  • = (equal) : eq
  • < (less than) : lt
  • <= (less than equal) : lteq
  • > (greater than) : gt
  • >= (greater than equal) : gteq

Tips

User.where(User.arel_table[:name].matches("%#{name_likely}%"))
Enter fullscreen mode Exit fullscreen mode

πŸ’Ž Gem Way

I hear that the gem named "Squeel" is very useful for this case.

User.where{age > target_age}
Enter fullscreen mode Exit fullscreen mode

Latest comments (1)

Collapse
 
mculp profile image
Matt Culpepper

Squeel does not seem to be actively maintained.

However, Sequel is another ActiveRecord alternative that gives you that block syntax and is actively maintained.

Sequel is powerful and after using it for the past two years, I think I prefer it to ActiveRecord.

It really makes it hard to do dumb stuff like N+1 queries on accident, but I think it takes a lot longer to understand than ActiveRecord.