Я хочу получить записи, которые имеют строковое поле, начинающееся с заданного префикса и заканчивающееся на любом одном символе. В принципе:
Model.where('field LIKE ?', "#{prefix}_").count
Проблема в том, что сам префикс может содержать специальные символы (например, %
или _
).
Есть ли способ избежать префикса, но не завершающий _
, не катя моё собственное дезинфицирующее средство с кучей #gsub
с?
2 ответа
Нет лучшего решения, чем заменить все _
на \_
и все %
на \%
, чтобы избежать их особого значения.
Model.where("field LIKE ?||'_'", escapeDataFunction("#{prefix}")).count
Идея состоит в том, чтобы избежать того, что нужно избежать, и жестко закодировать другую часть в состоянии «где». Также обратите внимание, что при использовании переменных подстановки (? Или: 1) данные вообще не должны быть экранированы вообще, но выражения «как» являются исключением, и в этом случае вы должны экранировать специальные символы со значением в как оператор.
Похожие вопросы
Новые вопросы
ruby-on-rails
Ruby on Rails - это полнофункциональная платформа веб-приложений с открытым исходным кодом, написанная на Ruby. Он следует популярной модели фреймворка MVC и известен своим подходом «соглашение поверх конфигурации» при разработке приложений.