我有多个要搜索的模型,以便结果可以包含所有模型的结果。假设我想搜索“靴子”,我希望它返回靴子类别以及销售靴子和实际靴子的零售商。我有一个类别、供应商和产品的模型。
在这种情况下,我宁愿不必创建连接表,因为每个对象都需要连接,这不是必需的,因为所有对象都将包含在搜索中。
我正在考虑使用 ransack gem,但我认为这对这个问题并不重要,因为无论我的搜索过程如何,它都是一样的。
也许composed_of 关系是有道理的,但我不能完全理解它。
我有多个要搜索的模型,以便结果可以包含所有模型的结果。假设我想搜索“靴子”,我希望它返回靴子类别以及销售靴子和实际靴子的零售商。我有一个类别、供应商和产品的模型。
在这种情况下,我宁愿不必创建连接表,因为每个对象都需要连接,这不是必需的,因为所有对象都将包含在搜索中。
我正在考虑使用 ransack gem,但我认为这对这个问题并不重要,因为无论我的搜索过程如何,它都是一样的。
也许composed_of 关系是有道理的,但我不能完全理解它。
假设您Product
belongs_to
的 aVendor
和belongs_to
aCategory
是您的查询:
string_to_search = 'boots'
@products = Product.where("title LIKE ?", "%#{string_to_search}%").includes(:vendor, :category).all
它将获取具有所需标题内容的所有产品及其所有类别和供应商。您可以遍历结果数据,无需额外查询来获取特定产品的类别/供应商。
如果您需要,例如,从@products
-- 中提取供应商列表,只需使用:
@vendors = @products.map &:vendor
我认为您需要在手工制作的 SQL 查询中使用 UNION 运算符。您可以使用 ActiveModel 创建一个伪模型,它可以充当聚合器,从真实模型中收集搜索结果,并为您的查询呈现一个类似于 ActiveRecord 的界面。