Para algo como esto, ignoraría las citas y escapes de ActiveRecord e iría directamente a ActiveRecord::Base.connection.quote
.
El SQL con el que intenta terminar es algo como esto:
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES ('example one''s value'), ('example (2) value')
EXCEPT SELECT column FROM TABLE
Puedes usar quote
para convertir '
a ''
(tenga en cuenta que SQL duplica las comillas simples para escapar de ellas) pero tendrá que agregar los paréntesis apropiados en los VALORES usted mismo. La quote
de la conexión El método también agregará las comillas simples externas.
Algo como esto:
values = array_of_strings.map { |s| "(#{ActiveRecord::Base.connection.quote(s)})" }.join(',')
seguido de:
sql = %Q{
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES #{values}
EXCEPT SELECT column FROM TABLE
}
debería hacer el truco y estar seguro.