使用 Postgres 在 rails 应用服务器中处理查询参数中的转义序列

Handling escape sequence in query params in rails app server with Postgres

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.

我们如何优雅地处理这种情况?

使用不同的转义字符,例如:

WHERE name ILIKE 'pattern\' ESCAPE '/'

如果没有安全转义符,可以加倍:

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