PIYO - Tech & Life -

PostgresSQL+ActiveRecordのwhereで大文字小文字を無視

Rails ActiveRecord

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%')"

matchesILIKEを使ってくれる。