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