För något sådant här skulle jag ignorera ActiveRecord-citat och escape-grejer och gå direkt till ActiveRecord::Base.connection.quote
.
Den SQL du försöker sluta med är ungefär så här:
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES ('example one''s value'), ('example (2) value')
EXCEPT SELECT column FROM TABLE
Du kan använda quote
för att konvertera '
till ''
(observera att SQL dubblar enkla citattecken för att undvika dem) men du måste själv lägga till lämpliga parenteser i VÄRDEN. Anslutningens quote
metod kommer också att lägga till de yttre enstaka citattecken.
Något så här:
values = array_of_strings.map { |s| "(#{ActiveRecord::Base.connection.quote(s)})" }.join(',')
följt av:
sql = %Q{
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES #{values}
EXCEPT SELECT column FROM TABLE
}
bör göra susen och vara säker.