Für so etwas würde ich die ActiveRecord-Zitate und Escapezeichen ignorieren und direkt zu ActiveRecord::Base.connection.quote
gehen .
Das SQL, das Sie erreichen möchten, sieht ungefähr so aus:
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES ('example one''s value'), ('example (2) value')
EXCEPT SELECT column FROM TABLE
Sie können quote
verwenden um '
umzuwandeln zu ''
(Beachten Sie, dass SQL einfache Anführungszeichen verdoppelt, um sie zu maskieren), aber Sie müssen die entsprechenden Klammern selbst in die VALUES einfügen. Das quote
der Verbindung -Methode fügt auch die äußeren einfachen Anführungszeichen hinzu.
Etwa so:
values = array_of_strings.map { |s| "(#{ActiveRecord::Base.connection.quote(s)})" }.join(',')
gefolgt von:
sql = %Q{
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES #{values}
EXCEPT SELECT column FROM TABLE
}
sollte den Zweck erfüllen und sicher sein.