Untuk sesuatu seperti ini, saya akan mengabaikan kutipan ActiveRecord dan melarikan diri dan langsung ke ActiveRecord::Base.connection.quote
.
SQL yang Anda coba dapatkan adalah seperti ini:
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES ('example one''s value'), ('example (2) value')
EXCEPT SELECT column FROM TABLE
Anda dapat menggunakan quote
untuk mengonversi '
ke ''
(perhatikan bahwa SQL menggandakan tanda kutip tunggal untuk menghindarinya) tetapi Anda harus menambahkan tanda kurung yang sesuai di VALUES sendiri. quote
koneksi metode juga akan menambahkan tanda kutip tunggal luar.
Sesuatu seperti ini:
values = array_of_strings.map { |s| "(#{ActiveRecord::Base.connection.quote(s)})" }.join(',')
diikuti oleh:
sql = %Q{
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES #{values}
EXCEPT SELECT column FROM TABLE
}
harus melakukan trik dan aman.