Безопасное использования 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