Обработка escape-последовательности в параметрах запроса на сервере приложений rails с Postgres - PullRequest
0 голосов
/ 13 ноября 2018
query_string = params[:q]
model.where("name ILIKE ? ", "#{query_string}").limit(10)

В контроллере у меня есть строки выше

params[:q] - это пользовательский ввод.

Всякий раз, когда ввод пользователя заканчивается на \, скажем police \, Postgres выдает эту ошибку:

ActionView::Template::Error (PG::InvalidEscapeSequence: ERROR:  LIKE pattern must not end with escape character.

Как мы можем изящно обращаться с такими случаями?

1 Ответ

0 голосов
/ 13 ноября 2018

Используйте другой escape-символ, например:

WHERE name ILIKE 'pattern\' ESCAPE '/'

Если у вас нет безопасного escape-символа, вы можете удвоить его:

WHERE nane ILIKE replace('pattern\', '\', '\\')
...