2013-09-26 3 views
0

У меня есть Mongoid поле «значение» как строка, как «Sivatha (Санкт-Петербург) 329», и я использовать регулярное выражение для запроса значения с помощью AJAX, как:Query Mongoid строка с кронштейнами

Street.any_of({ :value => /.*#{params[:q]}.*/i })) 

это вызывает ошибки в то время как мой PARAMS значение «Sivatha (Санкт-» в то время как я печатаю, и он не возвращает результат на всех, когда у меня есть точное значение «Sivatha (St. 329)».

Может кто-нибудь здесь дать мне несколько предложений? Благодарю.

ответ

2

Вы должны процитировать строки с Regexp.quote перед тем интерполирования их в регулярное выражение:

:value => /.*#{Regexp.quote(params[:q])}.*/i 

Вам не нужно передней и задней .*, они ничего для вас не делать, так что вы могли бы просто сказать, :

:value => /#{Regexp.quote(params[:q])}/i 

Если вы не использовали регистронезависимый регулярное выражение, то вы могли бы использовать Regexp.union цитировать и регулярное выражение-римент вашей строки все сразу:

:value => Regexp.union(params[:q]) 

но нет никакого чистого способа добавить опцию /i, так что /#{Regexp.quote(params[:q])}/i, вероятно, самая чистая вещь, которую вы можете сделать.

+0

Да, спасибо всем :-) У меня все получилось очень хорошо. Я также нашел ** Regexp.escape (params [: q]) **, который дает результат точно так же, как ** Regexp.quote (params [: q]) ** – Sinal

Смежные вопросы