Quiero buscar registros que tengan algún campo de cadena que comience con un prefijo dado y termine en cualquier carácter. Básicamente:
Model.where('field LIKE ?', "#{prefix}_").count El problema es que el propio prefijo puede contener caracteres especiales (como % o _ ).
¿Hay alguna manera de escapar del prefijo, pero no del final _ sin hacer rodar mi propio desinfectante con un montón de #gsub s?
No hay mejor solución que reemplazar todo _ con \_ y todo % con \% para escapar de su significado especial.
Model.where("field LIKE ?||'_'", escapeDataFunction("#{prefix}")).countLa idea es escapar de lo que debe escaparse y codificar la otra parte en la condición "dónde". También tenga en cuenta que cuando se utilizan variables de sustitución (? o :1), no es necesario escapar los datos en general, pero las expresiones "me gusta" son una excepción, y en ese caso, debe escapar los caracteres especiales con significado en el como operador.