1

良い一日!

pg_searchを使用して、Webアプリに全文検索を実装しています。ユーザーが自分のデータを印刷するフォームを作成し、それを表示しようとしましたが、結果は常に空です!なにが問題ですか?

/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:空の部分 ビュー/ pg_search / document / _documentを作成しましたが、結果がありません。

4

2 に答える 2

2

の作者ですpg_search

変数の名前を から に変更する@users必要があります。これは、 ではなく型のオブジェクトを常に返す@pg_search_documentsためです。PgSearch.multisearchPgSearch::DocumentUser

次に、ビューで次のようなことをしたいと思うでしょう:

<%= 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.

これが明確でない場合はお知らせください。ドキュメンテーションが少し大きくなったので、開発者が微妙な部分を理解できるように単純化して整理する必要があることを私は知っています。

ありがとう!

于 2012-01-15T07:06:48.957 に答える
0

params[:Search]送信ボタンの名前が含まれます。私はあなたが意味したと思いますparams[:q]。それを試してみてください。

于 2012-01-06T15:02:21.857 に答える