1

おはよう!検索フォーム(Rails 3.1)の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:私は空の部分ビュー/ pg_search /文書/ _Documentを作成し、今私はただの結果を持っていません。

答えて

2

私はpg_searchの著者です。

あなたはPgSearch.multisearchは常にタイプPgSearch::Document、ないUserのオブジェクトを返すので、@usersから@pg_search_documentsにあなたの変数の名前を変更するべきです。

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

<%= 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のみを検索する場合は、Userクラスで検索範囲を直接作成するには、代わりにpg_search_scopeを使用する必要があります。例:

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が少し大きくなったことを知っています。そして、開発者が微妙なことを理解する良い機会を持つように、単純化して整理する必要があります。

ありがとうございます!

0

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

+0

私はそれを編集しました。今、それは奇妙なエラーを示しています。ポストで更新を見てください! – ExiRe

+0

だから?あなたは 'ドキュメント/ドキュメント 'のビューを持っていません。修正しました –

+0

ビュー 'pg_search/documents/document'を作成しました。私はその見方の中で何をすべきですか? – ExiRe

関連する問題