как я могу написать LIKE заявление в рельсах для mongodb - PullRequest
0 голосов
/ 27 декабря 2018

Поиск работает, когда я использую целые слова, но я хочу, чтобы и частичные слова были распознаны.

У меня есть форма здесь:

= form_tag({}, method: :get) do
      = text_field_tag :query, query, class: 'form-input search__input', placeholder: t('.placeholder')
      - if query.nil?
        %span.search__icon.fa.fa-search{ aria: { hidden: 'true' } }
      - else
        = link_to more_path do
          %span.search__icon.text-success.fa.fa-times{ aria: { hidden: 'true' } }

контроллер:

  def set_query
    @query = params[:query]
  end


  def set_documents
    @documents = @folder ? @folder.documents : current_user.documents
    @documents = (params[:query] ? @documents.where(
      :$text => {:$search => params[:query]}
    ) : @documents).page(params[:page])
  end

Я попытался добавить это в контроллер, чтобы заставить его работать так, как я хочу:

@documents = Document.where('name LIKE ?', "%#{@query}%")
      end

но тогда я получаю ошибку:

wrong number of arguments (given 2, expected 1)

Как мне написать это так, чтобы поиск мог работать не только для целых слов, но и для написанных частичных слов.

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Mongoid поддерживает регулярное выражение в запросах

User.where(:name => /.*anand.*/i )

Здесь i для сопоставления без учета регистра.

или

search_term = params[:search_term]
User.where({:name => Regexp.new ("/.*"+search_term+".*/") })

вы можетенаписать любое регулярное выражение в reg объект

0 голосов
/ 27 декабря 2018

Если вы используете mongoid, вы можете использовать регулярные выражения в вашем where:

Document.where(name: /.*(#{@query})+.*/i)

Или попробуйте any_of:

Document.any_of(name: /.*(#{Regexp.escape(@query)}).*/i)

Итак, ваш set_documentsметод должен выглядеть примерно так:

def set_documents
  @documents = @folder ? @folder.documents : current_user.documents
  @documents = (params[:query] ? @documents.where(
    name: /.*#{@query}.*/i
  ) : @documents).page(params[:page])
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...