使用pg_search搜索多个模型

我正在尝试在我的rails应用程序中实现全文搜索。 我使用PostgreSQL作为数据库,因此,使用PostgreSQL的全文搜索function。 我有两个模型用户和记分板,我想在两个模型中搜索特定列以提取记录。

我正在使用pg_search gem进行全文搜索,我阅读了多元文档并成功实现了所有内容。 我创建了pg_search_documents表。 代码如下。

记分牌模型

include PgSearch multisearchable :against => [:name_of_organization, :name_of_activity, :name_of_scoreboard] 

用户模型

 include PgSearch multisearchable :against => :name 

控制器代码

  def index @pg_search_documents = PgSearch.multisearch(params[:search]) end 

当我在视图中运行代码时,搜索工作正常。 当搜索每个用户和记分板OBJECTS时,它将返回它们。

查看代码

     

但是,当我尝试运行上面给出的视图代码并搜索名称时,我将收到以下错误,

 undefined method `name_of_scoreboard' for #. 

当我尝试搜索name_of_scoreboard时,我收到类似的错误,

 `undefined method `name' for #.` 

如果我在我的视图中使用以下代码, 显示用户和记分板的ID。 这意味着我只能搜索两个模型中常见的列。

如果我尝试搜索两个不同的列,例如name和name_of_scoreboard ,我会得到上面提到的两个错误。 我可以在两个不同的模型之间进行搜索,但是我无法从视图中显示结果。 我不确定我做错了什么,或者我错过了一些重要的事情。 我真的不确定。 我试图保持简短并试图包含相关信息。 如果需要任何特定代码,请告诉我。 一如既往,非常感谢任何帮助!

我认为你正在混淆“搜索”并显示结果中的列 – 看起来你的代码实际上是在多个模型中的不同字段中搜索。 然后该搜索返回指向匹配对象的“文档”数组。 您遇到的问题是您正在尝试显示没有名称的对象的名称。 我认为以下内容就是您的目标。

 <% @pg_search_documents.each do |pg_search| %> <% if pg_search.searchable.respond_to?(:name) %> <%= pg_search.searchable.name %> <% else %> <%= pg_search.searchable.name_of_organization %> <% end %> <% end %> 

如果结果对象具有名称(即 – 如果是用户),则显示名称,否则显示组织名称(如果是记分板)。 请注意,这不是一个很好的解决方案,因为它现在在您的视图中引入了逻辑,但它解释了这个问题。