Cайт веб-разработчика, программиста Ruby on Rails ESV Corp. Екатеринбург, Москва, Санкт-Петербург, Первоуральск

Админка на Ruby on Rails

Безопасное использования LIKE с шаблоном (wildcards) в запросах ActiveRecord Ruby on Rails

В запроса ActiveRecord важно обезопасить, изолировать (sanitize) значения, например:

Record.where('field = ?', val).first

Но в случае LIKE с шаблоном это не работает:

Record.where('field LIKE %?%', val).first

Следующий способ работает, но он не безопасен:

Record.where("field LIKE '%#{val}%'").first

 

Решение 1:

Record.where('field LIKE ?', "%#{val}%").first

Решение 2:

Record.where('field LIKE CONCAT("%", ?, "%")', val).first

Решение 3:

Модификация небезопасного метода, приведенного выше.

val = RecordClass.sanitize("%#{val}%")
Record.where("field LIKE #{val}").first