Ruby on rails 我在这里找什么关系?

Ruby on rails 我在这里找什么关系?,ruby-on-rails,model,Ruby On Rails,Model,我有多个要搜索的模型,以便结果可以包括所有模型的结果。比如说,我想搜索“靴子”,我想让它返回靴子类别以及销售靴子和实际靴子的零售商。我有一个类别、供应商以及产品的模型 在这种情况下,我不想创建联接表,因为每个对象都需要联接,而这不是必需的,因为所有对象都要包含在搜索中 我正在考虑使用搜救宝石,但我不认为这对问题很重要,因为无论我的搜索程序如何,它都是一样的 也许组合关系是有意义的,但我不能完全理解它。我认为您需要在手工创建的SQL查询中使用UNION运算符。您可以使用ActiveModel创建一

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

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

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


也许组合关系是有意义的,但我不能完全理解它。

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

假设您的
产品
属于
a
供应商
属于
a
类别
以下是您的查询:

string_to_search = 'boots'
@products = Product.where("title LIKE ?", "%#{string_to_search}%").includes(:vendor, :category).all
它将获取所有具有所需标题内容的产品及其所有类别和供应商。您可以遍历生成的数据,而不需要其他查询来获取特定产品的类别/供应商

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

@vendors = @products.map &:vendor

我倾向于避免SQL手动路径,因为我会失去很多RoR好东西。我将如何创建您描述的聚合模型?我的回答是一个解决方案,您将使用手动SQL联合,并将其包装在ActiveModel中以重新获得RoR好处。跟我聊聊,我知道了,我可以陪你走过去。我看不到你的聊天信息,我应该如何连接?我只是被邀请聊天,我只是建立了一个聊天室,“如何在ActiveModel中包装联盟”,看看你是否可以进入该聊天室,单击top@user1098873,我认为另一个答案仍然是要走的路,只要你能通过关联将所有模型联系在一起,ransack将为您提供一种简单的方法,通过一个“search\u form\u for”调用生成复杂的搜索表单。唯一的问题是如何处理搜索结果。joed提出了一个解决方案,可能还有其他解决方案。这是一个巧妙的解决方案,我的回答是假设您的搜索将基于多个属性,即在标题中,或者产品中的描述,或者供应商中的描述属性,等等。我有点误解了你关于ransack gem的观点,我也不知道,但听起来ransack与这个答案结合起来比ActiveModel扭曲的工会更容易。这不能处理类别名称或供应商属性的情况(名称、销售产品等)匹配查询。我需要结果包括供应商、类别和产品,因为无论类型如何,结果集都应该包括匹配的对象。在这种情况下,您只需要3个查询:每个模型一个,不是吗?我不确定我需要什么,但我的目标是有一个搜索框,可以跨多个模型返回结果。我想使用搜索宝石,以避免重新发明许多轮子,并且ransack看起来不错(元搜索的替代品)。我想弄清楚如何拥有一个延迟加载模型,该模型在幕后只是包含数据的模型的代理。正如我看到的:您运行3个查询来获取3个实体数组。然后创建3个部分来呈现每种类型的实体,并通过
=render@entitisen
(这是HAML)在结果页上显示它们在每个章节前加上一些标题,如供应商提供的