Мы используем Datamapper в приложении Sinatra и хотели бы использовать регистр без учета регистра, который работает как на Sqlite (локально в разработке), так и на Postgresql (на Heroku в производстве).
У нас есть такие выражения, как
TreeItem.all(:name.like =>"%#{term}%",:unique => true,:limit => 20)
Если term
- это «BERL», мы получаем предложение «BERLIN» из бэкэндов Sqlite и Postgresql.Однако, если term
- это «Berl», мы получаем этот результат только из Sqlite, а не из Postgresql.
Я думаю, это связано с тем, что и dm-postgres-adapter, и dm-sqlite-adapter выводятLIKE
в результирующем запросе SQL.Поскольку в Postgresql учитывается регистр LIKE
, мы получаем это (для нас нежелательное) поведение.
Есть ли способ получить без учета регистра, как в Datamapper, не прибегая к использованию необработанного SQL-запроса к адаптеру или исправляя адаптер для использования ILIKE
вместо LIKE
?
Iконечно, можно использовать что-то промежуточное, например:
TreeItem.all(:conditions => ["name LIKE ?","%#{term}%"],:unique => true,:limit => 20)
, но тогда мы будем привязаны к использованию Postgresql в нашем собственном коде, а не просто как конфигурация для адаптера.