Đối với những thứ như thế này, tôi sẽ bỏ qua phần trích dẫn và thoát ActiveRecord và chuyển thẳng đến ActiveRecord::Base.connection.quote
.
SQL mà bạn đang cố gắng kết thúc là một cái gì đó như thế này:
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES ('example one''s value'), ('example (2) value')
EXCEPT SELECT column FROM TABLE
Bạn có thể sử dụng quote
để chuyển đổi '
thành ''
(lưu ý rằng SQL nhân đôi các dấu ngoặc đơn để thoát khỏi chúng) nhưng bạn sẽ phải tự thêm các dấu ngoặc đơn thích hợp trong các GIÁ TRỊ. quote
của kết nối phương thức cũng sẽ thêm các dấu ngoặc kép bên ngoài.
Một cái gì đó như thế này:
values = array_of_strings.map { |s| "(#{ActiveRecord::Base.connection.quote(s)})" }.join(',')
tiếp theo là:
sql = %Q{
INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES #{values}
EXCEPT SELECT column FROM TABLE
}
nên thực hiện thủ thuật và an toàn.