Reputation: 15985
My development database is SQLite but I deploy my app to Heroku and they are using PostgreSQL.
Now sometimes I have two different results coming out if I perform searches because PostgreSQL is case-sensitive but SQLite is not.
Shouldn't Rails standardize these things? What methods should I use to solve that?
Here is how to fix it with raw SQL
Upvotes: 11
Views: 9839
Reputation: 35505
There are many relatively common things that ActiveRecord doesn't handle, and LIKE matching is one of them. Here is how to achieve this using straight Arel instead.
Model.where(
Model.arel_table[:title].matches("%#{search_term}%")
)
You can install Arel-Helpers to make this a little easier
Model.where(Model[:title].matches("%#{search_term}%"))
I previously recommended Squeel for this, but the original creator has stopped supporting it and there doesn't seem to be a full-time developer maintaining it. And since it plays around with private ActiveRecord APIs, it needs constant tending.
Upvotes: 4
Reputation: 10206
Another DDL
way of handling this is the citext
data type, or case-insensitive TEXT.
Upvotes: 4
Reputation: 9255
Case insensitive searching in Postgres:
ilike
instead of like
(case-insensitive like)Upvotes: 42