3

我有多个要搜索的模型,以便结果可以包含所有模型的结果。假设我想搜索“靴子”,我希望它返回靴子类别以及销售靴子和实际靴子的零售商。我有一个类别、供应商和产品的模型。

在这种情况下,我宁愿不必创建连接表,因为每个对象都需要连接,这不是必需的,因为所有对象都将包含在搜索中。

我正在考虑使用 ransack gem,但我认为这对这个问题并不重要,因为无论我的搜索过程如何,它都是一样的。

也许composed_of 关系是有道理的,但我不能完全理解它。

4

2 回答 2

1

假设您Product belongs_to的 aVendorbelongs_toaCategory是您的查询:

string_to_search = 'boots'
@products = Product.where("title LIKE ?", "%#{string_to_search}%").includes(:vendor, :category).all

它将获取具有所需标题内容的所有产品及其所有类别和供应商。您可以遍历结果数据,无需额外查询来获取特定产品的类别/供应商。

如果您需要,例如,从@products-- 中提取供应商列表,只需使用:

@vendors = @products.map &:vendor
于 2012-04-15T15:46:54.527 回答
0

我认为您需要在手工制作的 SQL 查询中使用 UNION 运算符。您可以使用 ActiveModel 创建一个伪模型,它可以充当聚合器,从真实模型中收集搜索结果,并为您的查询呈现一个类似于 ActiveRecord 的界面。

于 2012-04-15T14:57:11.050 回答