2015-11-03 2 views
0

Мне потребовалось немного, чтобы понять это, и я уверен, что другие там тоже любопытно, как это сделать.

У меня есть случай, когда мне нужно запустить .and() запрос с использованием пользовательского ввода, который я преобразовал в массив. Моя проблема заключалась в том, что запрос искал каждое поле для ОБОИХ слов, которые были прочитаны из ввода.

Rails & Mongoid - Слияние нескольких критериев

ответ

0

Так что я сделал, это разбил запросы на основе полей. То есть если у вас есть поля :tags, :story, :author вы бы 3 запросов, tag_query = Book.any_in(:tags => @user_search)
Я создал пустой хэш conditions = {}
Тогда я бы сливаться каждый запрос к conditions хэш с помощью conditions.merge!(tag_query.selector)

я решил, какие запросы сливаться путем проверки вернулся ли запрос любые Book документы: tag_query.exists ? conditions.merge!(tag_query.selector) : nil. Если запрос вернул документ книги, он был объединен с хешем, если не произойдет, тогда ничего не произойдет.

Заключительным шагом является выполнение фактического запроса, о котором мы заботимся. @book = Book.where(conditions). Это объединит все запросы, которые действительно нашли что-то и разбив их вместе, как запрос .and()!

Вместо того, чтобы возвращать 0, потому что оба слова не были найдены в каждом поле, это разумно объединяет поля, которые действительно что-то нашли и делает это, поэтому он учитывает только то, что оба слова были найдены в документе целиком.

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