За нещо подобно бих пренебрегнал нещата за цитиране и екраниране на ActiveRecord и бих отишъл направо към ActiveRecord::Base.connection.quote
.
SQL, до който се опитвате да стигнете, е нещо подобно:
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES ('example one''s value'), ('example (2) value')
EXCEPT SELECT column FROM TABLE
Можете да използвате quote
за преобразуване на '
към ''
(обърнете внимание, че SQL удвоява единичните кавички, за да ги избегне), но ще трябва сами да добавите подходящите скоби в СТОЙНОСТИТЕ. quote
на връзката ще добави и външните единични кавички.
Нещо подобно:
values = array_of_strings.map { |s| "(#{ActiveRecord::Base.connection.quote(s)})" }.join(',')
последвано от:
sql = %Q{
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES #{values}
EXCEPT SELECT column FROM TABLE
}
трябва да свърши работа и да е в безопасност.