搜索表单中的pg_search没有结果(Rails 3.1)

时间:2012-01-06 15:00:23

标签: ruby-on-rails ruby-on-rails-3.1 full-text-search pg-search

美好的一天!

我使用pg_search在我的网络应用中实现全文搜索。我创建了用户打印数据的表单,然后我尝试显示它但结果总是空的!有什么问题?

/views/users/index.html.erb

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

/views/shared/_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 %>

/controllers/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中编辑后我有params [: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 个答案:

答案 0 :(得分:2)

我是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.

如果不清楚,请告诉我。我知道documentation已经变得有点大,应该简化和组织,以便开发人员有更好的机会了解细微之处。

谢谢!

答案 1 :(得分:0)

params[:Search]将包含提交按钮的名称。我想你的意思是params[:q]。试试吧。