0

pg_search gem を使用して、Rails アプリに検索機能を実装したいと考えています。ドキュメントに記載されているように、すべてをセットアップしました。次に、show アクションを使用して検索コントローラーをセットアップしました。

def show
  @pg_search_documents = PgSearch.multisearch(search_params)
end

検索自体は機能しますが、私の見解では非常に厄介な問題があります。私が何をしようとも、常に PgSearch::Document オブジェクトの配列を出力します。私がこれを私の見解でしか書いていない場合でも:

<%= @pg_search_documents.each do |document| %>
<% end %>

私はこれを取得します(私はそれを短縮しました):

[#<PgSearch::Document id: 2, content: "…", searchable_id: 28, searchable_type: "Vessel">, #<PgSearch::Document id: 3, content: "…", searchable_id: 27, searchable_type: "Vessel">]

pg_search が、これまで対処したことのないポリモーフィックな関連付けをセットアップすることは知っています — それが問題なのでしょうか?

前もって感謝します

4

2 に答える 2

2
<%= @pg_search_documents.each do |document| %>
<% end %>

これは古典的なエラーで、私が Rails を学び始めたときに頭を悩ませたことを覚えています。間違いは<%= %>withの使用eachです。の戻り値eachは反復処理する配列 (この場合は@pg_search_documents) であり、 を使用<%=することで、その配列から文字列を作成してビューに挿入するよう Rails に指示します。それは通常、あなたが望むものではありません: に渡すブロック内のコードによってビューを生成したいのですeach

<% @pg_search_documents.each do |document| %>代わりに ( を省略して) を使用する=と、配列のコンテンツのダンプを回避できます。

@blelumpが示唆するように使用する必要があるかもしれませんが.searchable、よくある落とし穴であるため、質問の残りの半分に答えたいと思いました。

于 2014-11-10T23:15:35.093 に答える
1

元のソース モデルに戻るには、searchableこれらの検索結果レコードに対して呼び出しが必要です。

<% @pg_search_documents.each do |document| %>
  <%= document.searchable %>
<% end %>

コントローラ内でソース モデルに戻すこともできます。たとえば、次のようになります。

@pg_search_documents = PgSearch.multisearch(search_params).collect(&:searchable)

次に、要素@pg_search_documentsが含まれます。Vessel

于 2014-11-10T20:08:40.113 に答える