У меня есть модель Item с индексированным полем с именем _key, то есть массивом строк (ключевые слова для поиска).Теперь мне нужно выполнить автозаполнение для этой модели (через JSON) в другой форме, и проблема в том, что вместо точного поиска по всем словам, введенным пользователем, мне нужно выполнить точный поиск по всем, кроме одного, последним словам.Итак, я сделал следующие области действия в этой модели:
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 (: условие => ...)' и так далее.Не могли бы вы предложить, как я могу сделать эту работу?