July 14, 2020
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:
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:
where
clause with the comparison operator doesn't raise an exception
when ActiveRecord::Relation
uses ambiguous column name.where
clause 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.
>> 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
>> 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.
If this blog was helpful, check out our full blog archive.