For noget som dette ville jeg ignorere ActiveRecord-citaterne og undslippende ting og gå direkte til ActiveRecord::Base.connection.quote
.
Den SQL, du forsøger at ende med, er noget som denne:
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES ('example one''s value'), ('example (2) value')
EXCEPT SELECT column FROM TABLE
Du kan bruge quote
at konvertere '
til ''
(bemærk, at SQL fordobler enkelte anførselstegn for at undslippe dem), men du skal selv tilføje de relevante parenteser i VÆRDIERNE. Forbindelsens quote
metode vil også tilføje de ydre enkelte anførselstegn.
Noget som dette:
values = array_of_strings.map { |s| "(#{ActiveRecord::Base.connection.quote(s)})" }.join(',')
efterfulgt af:
sql = %Q{
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES #{values}
EXCEPT SELECT column FROM TABLE
}
bør gøre tricket og være sikker.