SQLのlower
Model.where("lower(name) like ?", "%john%").to_sql
# SELECT \"models\".* FROM \"models\" WHERE (lower(name) like '%john%')
SQLのILIKE
PosgreSQLではILIKEが使える。
Model.where("name ilike ?", "%john%").to_sql
# SELECT \"models\".* FROM \"models\" WHERE (name ilike '%john%')
arelを使う
t = Model.arel_table
Model.where(t[:name].matches("%john%")).to_sql
# SELECT \"models\".* FROM \"models\" WHERE (\"models\".\"name\" ILIKE '%john%')"
matches
がILIKE
を使ってくれる。