如何使用包含结果链接的pg_search multisearch创建搜索结果页面?

时间:2012-05-27 17:08:15

标签: ruby-on-rails-3 full-text-search multiple-tables pg-search

我终于想出了如何实现pg_search的multiisearch功能。但是我在制作一个可用的搜索结果页面时遇到了麻烦,该页面显示了包含搜索词的各种文章和常见问题解答的链接。这是使用Rails 3.2.3的一个非常基本的设置:

型号:

我有一个文章和常见问题解答模型,都有“标题”和“内容”属性,以及这两个模型中的代码:

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

搜索表单查看代码:

搜索表单将所有内容传递给名为“results”的控制器。

<%= 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技能让我失望的地方。

有什么建议吗?有谁知道更优雅的方式来完成这个?任何想法/建议都非常感谢。

2 个答案:

答案 0 :(得分:9)

我做了类似的事情,只是用了

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

让Rails动态创建相关记录的路径。

答案 1 :(得分:0)

嗯,离开这个问题一段时间后,这真是令人惊讶。那个,以及基于Ruby的更持久的Google搜索。这是我提出的解决方案:

<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>

尽管如此,这对我来说似乎很难看。我仍然非常有兴趣看到更精简和更聪明的东西。