Ruby on rails 如何防止此Ruby字符串的插值?
我正在使用Ruby on Rails,我的数据库中有一个名为: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
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-非常有用:)