Вопрос по ruby-on-rails-3, full-text-search, pg-search – Базовая настройка для Multisearch в pg_search и Rails 3.2.3

2

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

Я пытался заставить работать многозадачную функцию pg_search в моем приложении Rails 3.2.3 после того, как узнал о функциональности pg_search_scope отэтот Railscast, Я считаю, что документация pg_search предполагает, что читатель лучше разбирается в Rails, чем я. Я просто не смог перейти от ресурсов, которые я обнаружил, к получению работающего приложения с использованием многопользовательского поиска. Любая помощь приветствуется. Вот мои настройки:

config/initializers/pg_search.rb

<code>PgSearch.multisearch_options = {
  :using => {
    :tsearch => {
      :dictionary => "english"
    },
    :trigram => {}
  },
  :ignoring => :accents
}
</code>

Search Form in the View

<code><%= form_tag articles_path, method: :get do %>
    <%= text_field_tag :query, params[:query], :class => "search-box" %>
    <%= submit_tag "Search This Site", name: nil, :class => "btn btn-search" %>
<% end %>
</code>

article.rb

<code>include PgSearch
multisearchable :against => [:title, :content]

def self.search(query)
  if query.present?
    search(query)
  else
    scoped
  end
end
</code>

articles_controller.rb

<code>def index
  @articles = PgSearch.multisearch(params[:query])

  respond_to do |format|
    format.html # index.html.erb
    format.json { render json: @articles }
  end
end
</code>

Я не получаю результатов поиска при поиске известных терминов. Что я делаю неправильно?

Ваш Ответ

1   ответ
1

@articlesеременная @ в моем контроллере вместо явного определения@pg_search_documents, что я и использовал в своем представлении (которое я совсем забыл опубликовать). Почему-то я думал, что используя@articles = PgSearch.multisearch(params[:query]) в моем контроллере добавит результаты поиска в `@pg_search_documents 'через волшебный соус pg_search.

Это верно. Переменные экземпляра, установленные в контроллере, будут буквально скопированы в представление. Вы могли бы назвать свою переменную "@anything_at_all", и она должна была бы буквально совпадать в обоих местах. Я обычно называю свои результаты "@results", чтобы упростить ввод текста. Grant Hutchins

Похожие вопросы