gpt4 book ai didi

ruby-on-rails - 使用 pg_search 搜索多个模型

转载 作者:行者123 更新时间:2023-11-29 12:44:02 32 4
gpt4 key购买 nike

我正在尝试在我的 Rails 应用程序中实现全文搜索。我使用 PostgreSQL 作为数据库,因此,使用 PostgreSQL 的全文搜索功能。我有两个模型 Users 和 Scoreboards,我想针对特定列搜索这两个模型以提取记录。

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

记分牌模型

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

用户模型

include PgSearch
multisearchable :against => :name

Controller 代码

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

当我运行代码 <%= pg_search.searchable %> 时搜索有效在 View 中。当搜索到用户和记分板对象时,这将返回它们中的每一个。

查看代码

<% @pg_search_documents.each do |pg_search| %>
<%= pg_search.searchable.name %>
<%= pg_search.searchable.name_of_organization %>
<% end %>

但是,当我尝试运行上面给出的 View 代码并搜索名称时,我会得到以下错误,

undefined method `name_of_scoreboard' for #<User:0x007fa44ad18cd8>. 

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

`undefined method `name' for #<Scoreboard:0x00000006fa3560>.` 

如果我在我看来使用以下代码,<%= @pg_search_documents.searchable.id %> ,显示用户和记分牌的 ID。这意味着我只能搜索两个模型中常见的列。

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

最佳答案

我认为您混淆了“搜索”和显示结果中的一列 - 看起来您的代码实际上是在多个模型的不同字段中进行搜索。该搜索然后返回指向匹配对象的“文档”数组。您遇到的问题是您试图显示没有名称的对象的名称。我认为您想要的是以下内容。

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

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

关于ruby-on-rails - 使用 pg_search 搜索多个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34914097/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com