Я не думаю, что ваша проблема с Unicode, ваши проблемы:
- Строка интерполяции внутри
by_partial
.
- И
\u
работает только внутри строк в двойных кавычках.
Вторые вещи первыми:
> '\u0070'
=> "\\u0070"
> '\\u0070'
=> "\\u0070"
> "\u0070"
=> "p"
Так что Movie.by_partial("\u0092")
должно работать.
Ваша первая проблема заключается в том, что вы передаете /\u0092/
(что соответствует соответствующему символу) на by_partial
, но by_partial
делает это:
/^.*#{name}.*/i
И /^.*#{/\u0092/}.*/i
и это заканчивается как /^.*(?-mix:\u0092).*/i
. Я предполагаю, что у драйвера MongoDB есть некоторые проблемы с преобразованием этого регулярного выражения Ruby в регулярное выражение JavaScript.
Драйвер MongoDB, похоже, совсем не похож на \u
в регулярном выражении. Подача /^\u0070/
в MongoDB не дает мне совпадений, но /^p/
находит то, что я ожидаю, /^#{"\u0070"}/
также работает. Я не уверен, что происходит в смелости переводчика регулярных выражений MongoDB, но мы не единственные, кто сталкивался с этим . Я предполагаю, что переводчик регулярных выражений MongoDB не понимает \u
, поэтому он в итоге преобразуется в необработанный \\u0092
, и, поскольку в вашей базе данных нет последовательности из шести символов, вы ничего не найдете .