我可以编写这个查询,它涉及两个表,并给出我想要的结果:
select inv.* from
item_to_sku its
left join inventory inv on its.sku_id=inv.sku_id
where its.item_id in (12345, 67890)我可以在Rails中用下面的代码来接近它:
ItemToSku.includes(:sku => :inventory).find_all_by_item_id([12345, 67890])但这毫无意义地将SKU表包含在其中。因为ItemToSku和Inventory都有一个sku_id,所以我想直接将它们连接在一起,就像上面的SQL版本一样。
在不向我的多对多表格模型(ItemToSku)添加令人困惑的关联的情况下,我如何才能编写一种适当的ActiveRecordy方式来实现这一点?我一直在尝试使用.joins(),但我找不到任何没有现有关联的使用.joins的示例。我不想创建关联的主要原因是,Sku上有大约20个关联,而Item上有更多的关联,复制它们并因此将真正的关联云起来只是为了优化一个查询,这似乎很愚蠢。
发布于 2013-12-13 02:01:56
joins可以通过多种方式使用。
i.加入协会
二、使用原始sql连接(这是您正在寻找的)
ItemToSku.joins("LEFT JOIN inventory ON item_to_sku.sku_id = inventory.sku_id").where("item_id in (?)", [12345, 67890])注意:includes用于急速加载
https://stackoverflow.com/questions/20550348
复制相似问题