/ / Gsub функция издаване в Ruby - рубин

Функция на функцията Gsub в Ruby - ruby

Опитвам се да създам функция за създаване на подготвени изявления за заявки на Salesforce. Изискването е да избягате от единични кавички, а от Salesforce да избягват други знаци.

prepared_query("Select Id from Account where Id = :id and Name = :name limit 1", {:id => "00001234", :name => "John "Smith"}

очакваната продукция е

"Select Id from Account where Id = "00001234" and Name = "John "Smith" limit 1"

Опитвам се да го използвам gsub за това. Моята функция е

def prepared_query(soql, *args)
if args[0].is_a? Hash
args[0].each do |key, val|
val.gsub!(""", %q(\"))
soql.gsub! ":#{key}", ""#{val}""
end
end
end

Изходът е

"Select Id from Account where Id = "00001234" and Name = "John limit 1Smith" limit 1"

Какво причинява този проблем?

Отговори:

3 за отговор № 1

Когато използвате gsub с два аргумента, заместващият низ се интерпретира по специален начин. Това, което е от значение за вашия случай е това " се заменя с поставянето на мача (съответствието с $" при обикновена замяна). За да избегнете това, трябва да използвате блок за gsub.

Коригирането на кода ви може да е така:

def prepared_query(soql, h = {})
h.each do |key, val|
val.gsub!(""", %q(\"))
soql.gsub!(":#{key}"){""#{val}""}
end
soql
end

0 за отговор № 2

Опитвам:

def prepared_query(soql, *args)
if args[0].is_a? Hash
args[0].each do |key, val|
soql.gsub! ":#{key}", "#{val.inspect}"
end
end
soql
end