Я хочу получить записи, которые имеют строковое поле, начинающееся с заданного префикса и заканчивающееся на любом одном символе. В принципе:

 Model.where('field LIKE ?', "#{prefix}_").count

Проблема в том, что сам префикс может содержать специальные символы (например, % или _).

Есть ли способ избежать префикса, но не завершающий _, не катя моё собственное дезинфицирующее средство с кучей #gsub с?

0
ndnenkov 24 Апр 2017 в 16:49

2 ответа

Лучший ответ

Нет лучшего решения, чем заменить все _ на \_ и все % на \%, чтобы избежать их особого значения.

0
Laurenz Albe 24 Апр 2017 в 13:53
Model.where("field LIKE ?||'_'", escapeDataFunction("#{prefix}")).count

Идея состоит в том, чтобы избежать того, что нужно избежать, и жестко закодировать другую часть в состоянии «где». Также обратите внимание, что при использовании переменных подстановки (? Или: 1) данные вообще не должны быть экранированы вообще, но выражения «как» являются исключением, и в этом случае вы должны экранировать специальные символы со значением в как оператор.

0
Joe Love 24 Апр 2017 в 17:12