我在这里寻找什么样的铁路关系?

时间:2012-04-15 13:25:54

标签: ruby-on-rails model

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

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

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

也许一个compos_of的关系是有道理的,但我无法完全理解它。

2 个答案:

答案 0 :(得分:1)

假设您的Product belongs_to一个Vendorbelongs_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的界面。