gpt4 book ai didi

ruby - Ruby 中的 Gsub 函数问题

转载 作者:太空宇宙 更新时间:2023-11-03 18:21:22 24 4
gpt4 key购买 nike

我正在尝试创建一个函数来为 Salesforce 查询创建准备好的语句。要求是转义单引号;其他字符由 Salesforce 转义。当我打电话时

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

预期的输出是

“从 Id = '00001234' 且 Name = 'John\'Smith' limit 1 的帐户中选择 Id”

我正在尝试为此使用 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

输出是

“从 Id = '00001234' 且名称 = 'John limit 1Smith' limit 1 的帐户中选择 Id”

是什么导致了这个问题?

最佳答案

当您使用带两个参数的 gsub 时,替换字符串将以特殊方式解释。与您的情况相关的是 \' 被替换为匹配项的词缀(普通替换中 $' 的对应项)。为了避免这种情况,您必须为 gsub 使用 block 。

对您的代码的修复可能是这样的:

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

关于ruby - Ruby 中的 Gsub 函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17781631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com