Próbuję utworzyć funkcję do tworzenia gotowych instrukcji dla zapytań Salesforce. Wymagane jest unikanie pojedynczych cudzysłowów, inne znaki są usuwane przez Salesforce.
prepared_query("Select Id from Account where Id = :id and Name = :name limit 1", {:id => "00001234", :name => "John "Smith"}
oczekiwany wynik to
"Select Id from Account where Id = "00001234" and Name = "John "Smith" limit 1"
Próbuję użyć gsub
dla tego. Moja funkcja to
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
Wyjście to
"Select Id from Account where Id = "00001234" and Name = "John limit 1Smith" limit 1"
Co powoduje ten problem?
Odpowiedzi:
3 dla odpowiedzi № 1Kiedy używasz gsub z dwoma argumentami, łańcuch zastępczy jest interpretowany w specjalny sposób. To, co jest istotne w twoim przypadku, jest takie "
zastępuje się przymiarem twojego meczu (odpowiednikiem $"
w zwykłej wymianie). Aby tego uniknąć, musisz użyć bloku dla gsub.
Poprawka do twojego kodu może wyglądać następująco:
def prepared_query(soql, h = {})
h.each do |key, val|
val.gsub!(""", %q(\"))
soql.gsub!(":#{key}"){""#{val}""}
end
soql
end
0 dla odpowiedzi nr 2
Próbować:
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