我正在使用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)
如您所见,此查询会搜索Owner
,Car
和Company
表。我用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
对多个表执行模糊搜索?
答案 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并且非常强大,您可以搜索模型。