Опитвам се да създам функция за създаване на подготвени изявления за заявки на 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