Rails - 如何使用Textacular在多个表上执行模糊搜索?

时间:2015-10-24 21:27:16

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

我正在使用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字段,当然不存在。除了companies.name字段之外,我希望它搜索owners.name字段。有谁知道如何使用textacular对多个表执行模糊搜索?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

不确定你是否坚持使用文字,但是从他们的文档来看,你看起来只能用一种模式进行搜索。

之前我使用过PgSearch并且非常强大,您可以搜索模型。