5

私はついにpg_searchのマルチサーチ機能を実装する方法を理解しました。しかし、検索用語を含むさまざまな記事やよくある質問へのリンクを表示する、使用可能な検索結果ページを作成するのに問題があります。Rails3.2.3を使用した非常に基本的なセットアップです。

モデル:

両方とも「Title」属性と「Content」属性を持つArticlesモデルとFaqsモデルがあり、両方のモデルにこのコードがあります。

include PgSearch
multisearchable :against => [:title, :content]

検索フォームビューコード:

検索フォームは、すべてを「結果」と呼ばれるコントローラーに渡します。

<%= form_tag result_index_path, method: :get do %>
  <%= text_field_tag :query, params[:query] %>
  <%= submit_tag "GO", name: nil %>
<% end %>

結果コントローラー:

class ResultController < ApplicationController
  def index
     @pg_search_documents = PgSearch.multisearch(params[:query])
  end
end

見つかった各結果のタイトルと、そのアイテムへのリンクを表示する検索結果ページを作成したいと思います。'class'属性を@pg_search_documentsから引き出す方法を理解しました。私の考えは、結果ページで次のようなことをすることです。

<ul>
<% @pg_search_documents.each do |pg_search_document| %>
  <li><%= link_to pg_search_document.searchable.title, "../#{pg_search_document.searchable.class}/#{pg_search_document.searchable.id}" %></li>
<% end %>
</ul>

このコードが生成するリンクの例は次のとおりhttp://localhost/Article/3です。「pg_search_document.searchable.class」を小文字にして複数形にする方法を理解できれば、家は自由になります。モデルとコントローラーでさまざまなメソッドを書いてみて、ヘルパーを書いてみました。しかし、これは私のRailsスキルが私を失敗させるところです。

助言がありますか?これを達成するためのよりエレガントな方法を知っている人はいますか?任意のアイデア/提案は非常に高く評価されています。

4

2 に答える 2

10

私は似たようなことをして、ちょうど使用しました

<%= link_to pg_search_document.searchable.title, pg_search_document.searchable %>

関連するレコードへのパスを Rails が動的に作成できるようにします。

于 2012-06-19T19:27:10.707 に答える
0

そうですね、問題から少し離れることで何が起こるかは驚くべきことです。それと、基本的なRubyでのより永続的なグーグル。これが私が思いついた解決策です:

<ul>
  <% @pg_search_documents.each do |pg_search_document| %>
    <li><%= link_to pg_search_document.searchable.title, "../#{(pg_search_document.searchable.class).to_s.downcase!.pluralize}/#{pg_search_document.searchable.id}" %></li>
  <% end %>
</ul>

それでも、これは私には醜いようです。もっと合理化されたインテリジェントなものを見たいと思っています。

于 2012-05-28T01:11:17.953 に答える