SQLのlower

1Model.where("lower(name) like ?", "%john%").to_sql
2# SELECT \"models\".* FROM \"models\"  WHERE (lower(name) like '%john%')

SQLのILIKE

PosgreSQLではILIKEが使える。

1Model.where("name ilike ?", "%john%").to_sql
2# SELECT \"models\".* FROM \"models\"  WHERE (name ilike '%john%')

arelを使う

1t = Model.arel_table
2Model.where(t[:name].matches("%john%")).to_sql
3# SELECT \"models\".* FROM \"models\"  WHERE (\"models\".\"name\" ILIKE '%john%')"

matchesILIKEを使ってくれる。