Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何防止此Ruby字符串的插值?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 如何防止此Ruby字符串的插值?

Ruby on rails 如何防止此Ruby字符串的插值?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在使用Ruby on Rails,我的数据库中有一个名为: 1A J@ck$on & S0n's #{10} 我通过webhook接收此名称,然后用它搜索我的数据库,但它没有找到位置名称(而是搜索插入的名称: 1A J@ck$on & S0n's 10 如何通过webhook接收此字符串,如下所示: @location = inbound_webhook_request['location'] 然后将其放入pg“like”查询中,如下所示: Location.where

我正在使用Ruby on Rails,我的数据库中有一个名为:

1A J@ck$on & S0n's #{10}
我通过webhook接收此名称,然后用它搜索我的数据库,但它没有找到位置名称(而是搜索插入的名称:

1A J@ck$on & S0n's 10
如何通过webhook接收此字符串,如下所示:

@location = inbound_webhook_request['location']
然后将其放入pg“like”查询中,如下所示:

Location.where("name ~* ?", @location['name'])

如果一路上没有对它进行插值?

字符串就不会被插值。我不确定是什么导致了这种假设。但是:

Location.where(“name~*?”,@Location['name'])

假设您确实希望执行类似于的
操作,而不是正则表达式搜索,则可以执行以下操作:

Location.where("name LIKE ?", "%#{@location['name']}%")
或者,使用上述链接文档中的速记语法:

Location.where("name ~~ ?", "%#{@location['name']}%")
对于不区分大小写的
,如
,可以使用
ILIKE
~*


如果需要对用户输入进行进一步清理,请参阅。

字符串未被插入。我不确定是什么导致您做出这种假设。但是:

Location.where(“name~*?”,@Location['name'])

假设您确实希望执行类似于
操作,而不是正则表达式搜索,则可以执行以下操作:

Location.where("name LIKE ?", "%#{@location['name']}%")
或者,使用上述链接文档中的速记语法:

Location.where("name ~~ ?", "%#{@location['name']}%")
对于不区分大小写的
,如
,可以使用
ILIKE
~*


如果需要进一步清理用户输入,请参阅。

除非将该字符串键入双引号字符串文字,否则不会对其进行插值。通过“webhook”接收该字符串不会导致插值,因为
{}
将已被转义,例如
'1AJ@ck$on&S0n的#{10}#=>“1AJ@ck$on&S0n的\#{10}”
。您的问题是您正在使用模式匹配
~*
,并且在正则表达式中
{}
具有特殊含义。“{”…后面跟一个数字时,它是一个绑定的开始。“{m}”是原子的m个匹配序列,因此它实际上在搜索
”1AJ@ck$on&S0n's(第10排)请注意,这不是正则表达式或您的特定示例中唯一的特殊字符(或字符集)。例如,
$
将匹配字符串的结尾,除非您将字符串键入双引号字符串文字,否则不会对该字符串进行内插。通过“webhook”接收该字符串不会导致插值,因为
{}
已经被转义,例如
'1AJ@ck$on&S0n的#{10}#=>“1AJ@ck$on&S0n的\#{10}
。您的问题是您正在使用模式匹配
~*
,并且在正则表达式中
{}
具有特殊含义。“{”…后跟数字时,它是绑定的开始。“{m}”一个完全匹配原子的m序列,因此它实际上是在搜索
“1AJ@ck$on&S0n的##########“
(第10行)请注意,这不是唯一的特殊字符(或字符集)在正则表达式中,或在您的特定示例中。例如,
$
将匹配字符串的结尾非常感谢Tom-非常有用:)非常感谢Tom-非常有用:)