gpt4 book ai didi

ruby-on-rails - Rails - 获取具有重复对象的对象

转载 作者:行者123 更新时间:2023-11-29 14:20:01 25 4
gpt4 key购买 nike

在解决我需要获得 objects from objects in one query 的问题时,我得到了一些非常好的帮助.这就像一个魅力。

这是对那个问题的跟进。我选择为此创建一个新问题,因为根据我之前的规范回答了最后一个问题。有关详细信息,请参阅上一个问题。

基本上,我想在一个查询中获取多个对象的所有对象。例如。如果一个产品有多个类别,而这些类别又有多个产品,我想获得该关系中的所有产品,更容易(但错误地)放置:

all_products = @my_product.categories.products

这已通过此查询解决。这是我(最好)想要更改的查询:

Product.includes(:categories).where(categories: { id: @my_product.categories.pluck(:id) } )

现在,我意识到我在使用这个解决方案时错过了一些事情,那就是我只得到了一个独特产品的列表(这也是人们所期望的)。但是,我想也得到一个可能重复的列表

基本上,如果“Blue, Electric Car”包含在类别(“Blue”、“Electric”和“Car”)中,我希望返回该对象的三个实例,而不是一个唯一实例。

我想这不会让 Rails 有感觉,但是有没有办法改变上面的查询,这样它就不会为我提供返回列表中唯一对象的列表,而是“完整”列表?

最佳答案

AREL 的includes 方法将在两种策略之间进行选择以进行查询,其中一种只执行两个不同的查询,另一种执行 INNER JOIN。在这两种情况下,产品都是不同的。

您必须手动执行右外连接:

Product.joins('RIGHT JOIN categories ON categories.product_id = products.id').where(categories: { id: @my_product.categories.pluck(:id) } )

如果您想保持类别的预先加载,还添加了 .preload(:categories)

关于ruby-on-rails - Rails - 获取具有重复对象的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32134666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com