我使用multisearch在我的Rails 3.2.3应用程序上运行了pg_search.然后我在这篇文章中实现了nertzy(pg_search的作者)提供的初始化程序..现在,当我运行搜索时,我收到以下错误:
PG::Error: ERROR: operator does not exist: text % unknown
LINE 1: ... ((coalesce("pg_search_documents"."content", '')) % 'searchterm...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)
我的视图使用以下代码呈现:
<%= @pg_search_documents.each do |pg_search_document| %>
<%= pg_search_document.searchable.title %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
我终于想出了如何实现pg_search的multiisearch功能.但是我在制作一个可用的搜索结果页面时遇到了麻烦,该页面显示了包含搜索词的各种文章和常见问题解答的链接.这是使用Rails 3.2.3的一个非常基本的设置:
楷模:
我有一个文章和一个常见问题解答模型,都有"标题"和"内容"属性,以及这两个模型中的代码:
include PgSearch
multisearchable :against => [:title, :content]
Run Code Online (Sandbox Code Playgroud)
搜索表单查看代码:
搜索表单将所有内容传递给名为"results"的控制器.
<%= form_tag result_index_path, method: :get do %>
<%= text_field_tag :query, params[:query] %>
<%= submit_tag "GO", name: nil %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
结果控制器:
class ResultController < ApplicationController
def index
@pg_search_documents = PgSearch.multisearch(params[:query])
end
end
Run Code Online (Sandbox Code Playgroud)
我想创建一个搜索结果页面,显示找到的每个结果的标题,并返回该项目的链接.我想出了如何将'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>
Run Code Online (Sandbox Code Playgroud)
此代码产生的示例链接是:http://localhost/Article/3.如果我能弄清楚如何对"pg_search_document.searchable.class"进行整理和复数化,那么我将无家可归.我试过在模型和控制器中编写各种方法,并尝试编写一个帮助器.但这是我的Rails技能让我失望的地方.
有什么建议?有谁知道更优雅的方式来完成这个?任何想法/建议都非常感谢.