У меня есть элемент модели с индексированным полем с именем _key, то есть массив строк (ключевые слова для поиска). Теперь мне нужно сделать автозаполнение для этой модели (через JSON) в другой форме, и проблема в том, что вместо точного поиска всеми словами, введенными пользователем, мне нужно делать точный поиск всеми, кроме одного последнего слова. Так что я сделал это прицелами в этой модели:Проблема MongoID и multikey query
scope :find_by_keywords, lambda { |keys| where(:_keys.all => keys) }
scope :for_autocomplete, lambda { |keys| where(:_keys.all => keys[0..-2], :_keys => /^#{keys[-1]}/i) }
первый простор для точного поиска работает хорошо, но у меня есть проблемы со второй рамкой для автозаполнения. Mongoid оптимизирует (или что-то подобное) этот запрос, поэтому он становится
db_development['items'].find({:_keys=>/^qwer/i}, {})
т.е. он не попадает в ВСЕГДА первое условие. Это неудивительно, потому что для разных условий нужны разные критерии поля. Так что я попробовал много-много вариантов. Различные комбинации .all и .in, разделенные на разные методы «wheres», «all_in», «find (: conditions => ...)» и т. Д. Не могли бы вы предложить, как я могу сделать эту работу?