W przypadku czegoś takiego zignorowałbym cytowanie i ucieczkę ActiveRecord i przejdę prosto do ActiveRecord::Base.connection.quote
.
SQL, który próbujesz uzyskać, wygląda mniej więcej tak:
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES ('example one''s value'), ('example (2) value')
EXCEPT SELECT column FROM TABLE
Możesz użyć quote
przekonwertować '
do ''
(zwróć uwagę, że SQL podwaja pojedyncze cudzysłowy, aby je zmienić), ale będziesz musiał samodzielnie dodać odpowiednie nawiasy w WARTOŚCIACH. quote
połączenia metoda doda również zewnętrzne pojedyncze cudzysłowy.
Coś takiego:
values = array_of_strings.map { |s| "(#{ActiveRecord::Base.connection.quote(s)})" }.join(',')
a następnie:
sql = %Q{
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES #{values}
EXCEPT SELECT column FROM TABLE
}
powinien załatwić sprawę i być bezpieczny.