Mám mongoidné pole “hodnota„ako reťazec“Sivatha (St. 329)“a na zisťovanie hodnoty pomocou protokolu iax používam regex takto:
Street.any_of({ :value => /.*#{params[:q]}.*/i }))
Vyvoláva chyby, zatiaľ čo moja hodnota parametra je „Sivatha (St.„keď píšem a výsledok sa vôbec nevráti, keď mám presnú hodnotu“Sivatha (St. 329)".
Môže mi niekto tu dať nejaké návrhy? Vďaka.
odpovede:
2 pre odpoveď č. 1Mali by ste citovať reťazce Regexp.quote
pred ich interpoláciou na regulárny výraz:
:value => /.*#{Regexp.quote(params[:q])}.*/i
Nepotrebujete vedenie a zaostávanie .*
, nerobia pre vás nič, takže by ste mohli len povedať:
:value => /#{Regexp.quote(params[:q])}/i
Ak ste nepoužívali regulárny výraz nerozlišujúci veľké a malé písmená, môžete ho použiť Regexp.union
citovať a regex-ify svoj reťazec naraz:
:value => Regexp.union(params[:q])
ale neexistuje žiadny čistý spôsob, ako pridať /i
možnosť, že áno /#{Regexp.quote(params[:q])}/i
je pravdepodobne to najčistejšie, čo môžete urobiť.