Нет результатов с pg_search из формы поиска (Rails 3.1) - PullRequest
1 голос
/ 06 января 2012

Добрый день!

Я использую pg_search для реализации Полнотекстового поиска в моем веб-приложении. Я создал форму, где пользователь распечатывает свои данные, а затем я пытаюсь показать их, но результат всегда пуст! Что не так?

/ просмотров / пользователей / index.html.erb

<%= render 'shared/search_form' %>  
<%= will_paginate %>   
  <ul class="users">  
     <%= render @users %>       
  </ul>   
<%= will_paginate %>

/ вид / общий / _search_form.erb

<% search_id_attr = :q %>
<%= form_tag( users_path, :method => "get" ) do %>
  <%= label_tag( search_id_attr, "Search for:" ) %>
  <%= text_field_tag( search_id_attr ) %>
  <%= submit_tag("Search", :name => nil ) %>
<% end %>

/ контроллеры / users_controller.rb

class UsersController < ApplicationController  
  ...
  def index
    @title = "All users"
    @users = PgSearch.multisearch( params[:q] ).paginate( :page => params[:page] )
  end
...
end

UPD1 : После редактирования в /controllers/users_controller.rb у меня есть параметры [: q]. Теперь я получаю такую ​​ошибку:

ActionView::Template::Error (Missing partial pg_search/documents/document with {:handlers=>[:erb, :builder, :coffee], :formats=>[:html], :locale=>[:en, :en]}. Searched in:
  * "/Users/iUser/rails_projects_terminal/sample_app/app/views"
):
    6: <%= will_paginate %>
    7: 
    8: <ul class="users">
    9:  <%= render @users %>                                                                                                    
    10: </ul>
    11: 
    12: <%= will_paginate %>
  app/views/users/index.html.erb:9:in `_app_views_users_index_html_erb__3107215974202561754_70174719087800'

UPD2: Я создал пустое частичное views / pg_search / documents / _document и теперь у меня просто нет результатов.

Ответы [ 2 ]

2 голосов
/ 15 января 2012

Я автор pg_search.

Вам следует переименовать переменную с @users на @pg_search_documents, потому что PgSearch.multisearch всегда возвращает объекты типа PgSearch::Document, а не User.

Тогда вам захочется сделать что-то подобное на ваш взгляд:

<%= render 'shared/search_form' %>  
<%= will_paginate %>   
<ul class="users">
  <%= @pg_search_documents.each do |pg_search_document| %>
    <%= render pg_search_document.searchable %>  
  <%= render @users %>       
</ul>   
<%= will_paginate %>

Это потому, что multisearch был разработан для поиска по нескольким моделям.

Если вы хотите выполнить поиск, который ищет только User, вам следует вместо этого использовать pg_search_scope, чтобы создать область поиска непосредственно для класса User. Например:

class User < ActiveRecord::Base
  include PgSearch
  pg_search_scope :search_by_name, :against => [:name]
end

User.search_by_name("ExR") # => returns an Active Record scope of `User` objects.

Дайте мне знать, если это не ясно. Я знаю, что документация стала немного больше, и ее следует упростить и упорядочить, чтобы у разработчиков было больше шансов понять тонкости.

Спасибо!

0 голосов
/ 06 января 2012

params[:Search] будет содержать название вашей кнопки отправки. Я думаю, что вы имели в виду params[:q]. Попробуйте это.

...