Para algo assim, eu ignoraria o ActiveRecord citando e escapando coisas e iria direto para
ActiveRecord::Base.connection.quote
. O SQL com o qual você está tentando terminar é algo assim:
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES ('example one''s value'), ('example (2) value')
EXCEPT SELECT column FROM TABLE
Você pode usar
quote
para converter '
para ''
(observe que o SQL dobra aspas simples para escapar delas), mas você mesmo terá que adicionar os parênteses apropriados nos VALUES. A quote
da conexão O método também adicionará as aspas simples externas. Algo assim:
values = array_of_strings.map { |s| "(#{ActiveRecord::Base.connection.quote(s)})" }.join(',')
Seguido por:
sql = %Q{
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES #{values}
EXCEPT SELECT column FROM TABLE
}
deve fazer o truque e ser seguro.