5

我终于弄清楚了如何实现 pg_search 的多搜索功能。但我无法制作一个可用的搜索结果页面,该页面显示指向包含搜索词的各种文章和常见问题解答的链接。这是使用 Rails 3.2.3 的非常基本的设置:

楷模:

我有一个 Articles 和一个 Faqs 模型,两者都具有“Title”和“Content”属性,并且两个模型中的这段代码:

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

我想创建一个搜索结果页面,显示找到的每个结果的标题,并带有返回该项目的链接。我想出了如何从@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 回答