【问题标题】:Rails - How to Perform Fuzzy Search on Multiple Tables using Textacular?Rails - 如何使用 Textacular 对多个表执行模糊搜索?
【发布时间】:2016-01-24 05:47:57
【问题描述】:

我正在使用textacular gem 在我的 Rails 应用程序中实现模糊搜索,但我不知道如何同时对多个表执行搜索。这是一个示例查询,它在没有textacular 的情况下搜索多个表:

@results = Owner.includes(:car => :company).where("name LIKE ? OR cars.name LIKE ? OR companies.name LIKE ?", sql_query, sql_query, sql_query).references(:cars, :companies)

如您所见,此查询搜索OwnerCarCompany 表。我用textacular 得到的最远的是:

@results = Owner.includes(:car => :company).references(:cars, :companies).fuzzy_search({name: sql_query})

不过,上面的查询只搜索Owner 表。我已尝试执行以下操作以使其也搜索 Companies 表:

@results = Owner.includes(:car => :company).references(:cars, :companies).fuzzy_search({name: sql_query, "companies.name" => sql_query})

这不起作用,因为它尝试搜索owners.companies.name 字段,而该字段当然不存在。除了owners.name 字段之外,我还希望它搜索companies.name 字段。有谁知道如何使用textacular 对多个表执行模糊搜索?

【问题讨论】:

    标签: ruby-on-rails postgresql fuzzy-search


    【解决方案1】:

    我想通了!您需要将连接的表名称添加为嵌套哈希。假设我想通过Owner 模型和Car 模型的name 字段进行搜索:

    @results = Owner.includes(:car).references(:cars).fuzzy_search({name: sql_query, cars: { name: sql_query}})
    

    fuzzy_search 方法中指定的cars 表是指表的名称,而不是关联的名称。

    我从 2008 年的旧 Rails commit 中获得灵感,这让我意识到可以在任何标准 Rails 查询中使用的条件都可以在 fuzzy_search 方法中使用。

    【讨论】:

      【解决方案2】:

      不确定您是否与 textacular 结婚,但从他们的文档看来您只能按一个模型进行搜索。

      我之前使用过PgSearch,它非常强大,您可以跨型号进行搜索。

      【讨论】:

      • 感谢您的回答!当您发布此内容时,我实际上是在输入我的答案。我想出了怎么做。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多