我将mongoid字段' 值 '作为字符串,如“ Sivatha(St. 329)”,我使用正则表达式来查询值通过ajax如下:
Street.any_of({ :value => /.*#{params[:q]}.*/i }))
它引发了错误,而我的参数值是“ Sivatha(圣”,而我正在打字时,当我有确切的值时,它根本不会返回结果“ Sivatha(St) .329)“。
这里有人可以给我一些建议吗?感谢。
答案 0 :(得分:2)
在将字符串插入正则表达式之前,您应该使用Regexp.quote
引用字符串:
:value => /.*#{Regexp.quote(params[:q])}.*/i
你不需要领先和尾随.*
,他们不会为你做任何事情,所以你可以这样说:
:value => /#{Regexp.quote(params[:q])}/i
如果你没有使用不区分大小写的正则表达式,那么你可以使用Regexp.union
来引用和regex-ify你的字符串:
:value => Regexp.union(params[:q])
但是没有干净的方法来添加/i
选项,因此/#{Regexp.quote(params[:q])}/i
可能是最干净的事情。