Pour quelque chose comme ça, j'ignorerais les choses de citation et d'échappement d'ActiveRecord et j'irais directement à ActiveRecord::Base.connection.quote
.
Le SQL avec lequel vous essayez de vous retrouver ressemble à ceci :
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES ('example one''s value'), ('example (2) value')
EXCEPT SELECT column FROM TABLE
Vous pouvez utiliser quote
convertir '
à ''
(notez que SQL double les guillemets simples pour les échapper) mais vous devrez ajouter vous-même les parenthèses appropriées dans les VALEURS. La quote
de la connexion ajoutera également les guillemets simples externes.
Quelque chose comme ça :
values = array_of_strings.map { |s| "(#{ActiveRecord::Base.connection.quote(s)})" }.join(',')
suivi de :
sql = %Q{
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES #{values}
EXCEPT SELECT column FROM TABLE
}
devrait faire l'affaire et être en sécurité.