Ruby on Rails: ¿Cómo desinfectar una cadena para SQL cuando no usa find?

Estoy tratando de desinfectar una cadena que involucra la entrada del usuario sin tener que recurrir a la creación manual de mi propia regex posiblemente con errores, si es posible, sin embargo, si esa es la única manera, también agradecería si alguien me puede señalar en la dirección correcta a un regex que es poco probable que le falte algo. Hay varios métodos en Rails que pueden permitirle ingresar comandos SQL nativos, ¿cómo escapan las personas de la entrada del usuario para esos?

La pregunta que hago es amplia, pero en mi caso particular, estoy trabajando con una columna en mi base de datos de Postgres que Rails no entiende de forma nativa hasta donde yo sé, el tsvector, que contiene información de búsqueda de texto sin formato. Rails puede escribir y leer de él como si fuera una cadena, sin embargo, a diferencia de una cadena, no parece que se escape automáticamente cuando hago cosas como vector = dentro del modelo.

Por ejemplo, cuando hago model.name = '::', donde name es una cadena, funciona bien. Cuando hago model.vector = '::' se produce un error:

ActiveRecord::StatementInvalid: PGError: ERROR:  syntax error in tsvector: "::"
"vectors" = E'::' WHERE "id" = 1

Esto parece ser un problema causado por la falta de escape de los puntos y comas, y puedo configurar manualmente el vector = '::' bien.

También tuve la brillante idea, tal vez solo puedo llamar a algo como:

ActiveRecord::Base.connection.execute "UPDATE medias SET vectors = ? WHERE id = 1", "::"

Sin embargo, esta sintaxis no funciona, porque los comandos SQL sin formato no tienen acceso al método find para escapar e ingresar cadenas utilizando el? marca.

Esto me parece el mismo problema que llamar a connection.execute con cualquier tipo de entrada del usuario, ya que todo se reduce a desinfectar las cadenas, pero parece que no puedo encontrar ninguna manera de llamar manualmente a los métodos de desinfección de cadenas SQL de Rails. ¿Alguien puede dar algún consejo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta