Ruby on Rails: So bereinigen Sie einen SQL-String, wenn Sie find nicht verwenden

Ich versuche, eine Zeichenfolge zu bereinigen, bei der Benutzereingaben erforderlich sind, ohne dass ich nach Möglichkeit meine eigene, möglicherweise fehlerhafte Regex manuell erstellen muss. Wenn dies jedoch der einzige Weg ist, würde ich es auch begrüßen, wenn jemand mich in die richtige Richtung zu a weisen kann Regex, der wahrscheinlich nichts fehlen wird. In Rails gibt es eine Reihe von Methoden, mit denen Sie native SQL-Befehle eingeben können. Wie entgehen die Benutzer diesen Eingaben?

Die Frage, die ich stelle, ist sehr weit gefasst, aber in meinem speziellen Fall arbeite ich mit einer Spalte in meiner Postgres-Datenbank, die Rails meines Wissens nicht versteht, nämlich dem tsvector, der Suchinformationen in Klartext enthält. Rails kann darauf schreiben und lesen, als wäre es eine Zeichenfolge. Im Gegensatz zu einer Zeichenfolge scheint sie jedoch nicht automatisch ausgeblendet zu werden, wenn ich Dinge wie vector = innerhalb des Modells tue.

Wenn ich zum Beispiel model.name = '::' mache, wobei name eine Zeichenfolge ist, funktioniert es einwandfrei. Wenn ich model.vector = '::' mache, tritt ein Fehler auf:

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

Dies scheint ein Problem zu sein, das durch ein fehlendes Entweichen der Semikolons verursacht wird, und ich kann den vector = '::' fine manuell einstellen.

Ich hatte auch die gute Idee, vielleicht kann ich einfach so etwas nennen:

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

Diese Syntax funktioniert jedoch nicht, da die unformatierten SQL-Befehle keinen Zugriff auf die Methode von find zum Escape- und Eingeben von Zeichenfolgen mithilfe des Befehls? Kennzeichen.

Dies ist für mich das gleiche Problem wie das Aufrufen von connection.execute mit jeder Art von Benutzereingabe, da alles auf das Bereinigen der Zeichenfolgen hinausläuft, aber ich kann anscheinend keine Möglichkeit finden, die SQL-Zeichenfolgen-Bereinigungsmethoden von Rails manuell aufzurufen. Kann mir jemand einen Rat geben?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage