Per qualcosa del genere ignorerei le citazioni di ActiveRecord e le cose di escape e andrei direttamente a ActiveRecord::Base.connection.quote
.
L'SQL che stai cercando di ottenere è qualcosa del genere:
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES ('example one''s value'), ('example (2) value')
EXCEPT SELECT column FROM TABLE
Puoi usare quote
per convertire '
a ''
(nota che SQL raddoppia le virgolette singole per evitarle) ma dovrai aggiungere tu stesso le parentesi appropriate nei VALUES. quote
della connessione il metodo aggiungerà anche le virgolette singole esterne.
Qualcosa del genere:
values = array_of_strings.map { |s| "(#{ActiveRecord::Base.connection.quote(s)})" }.join(',')
seguito da:
sql = %Q{
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES #{values}
EXCEPT SELECT column FROM TABLE
}
dovrebbe fare il trucco ed essere al sicuro.