Please note that the PR discussed in this blog was reverted.
Rails 6.1 adds support to comparison operator in the where clause. The four
comparison operators supported are:
- Greater than (>).
- Greater than equal to (>=).
- Less than (<).
- Less than equal to (<=).
The comparison operator is also supported by the finder methods in ActiveRecord
which internally uses where clause, for example: find_by, destroy_by,
delete_by.
The new style for comparisons has to follow advantages:
- The
whereclause with the comparison operator doesn't raise an exception whenActiveRecord::Relationuses ambiguous column name. - The
whereclause with the comparison operator handle proper precision of the database columns.
Before Rails 6.1, to add a condition with comparison in where clause, we had to add raw SQL notation.
Rails 6.0.0
>> Post.where("DATE(published_at) > DATE(?)", Date.today)
# => <ActiveRecord::Relation [...]>
>> Post.find_by("likes < ?", 10)
# => <ActiveRecord::Relation [...]>
# Following query on execution would raise exception.
>> Post.joins(:comments).where("likes > 10")
# => ambiguous column name: id
Rails 6.1.0
>> Post.where("published_at >": Date.today)
# => <ActiveRecord::Relation [...]>
>> Post.find_by("likes <": 10)
# => <ActiveRecord::Relation [...]>
# Following query on execution would NOT raise exception.
>> Post.joins(:comments).where("likes >": 10)
# => <ActiveRecord::Relation [...]>
Check out the pull request for more details on this.