Voor zoiets als dit zou ik de ActiveRecord-citaten en escape-dingen negeren en rechtstreeks naar ActiveRecord::Base.connection.quote
gaan .
De SQL waarmee je probeert te eindigen is ongeveer als volgt:
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES ('example one''s value'), ('example (2) value')
EXCEPT SELECT column FROM TABLE
U kunt quote
. gebruiken om '
. te converteren naar ''
(merk op dat SQL enkele aanhalingstekens verdubbelt om eraan te ontsnappen) maar u zult zelf de juiste haakjes in de WAARDEN moeten toevoegen. Het quote
van de connectie methode zal ook de buitenste enkele aanhalingstekens toevoegen.
Zoiets als dit:
values = array_of_strings.map { |s| "(#{ActiveRecord::Base.connection.quote(s)})" }.join(',')
gevolgd door:
sql = %Q{
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES #{values}
EXCEPT SELECT column FROM TABLE
}
zou het lukken en veilig zijn.