2013-12-12 49 views
1

我可以写这个查询其中涉及2个表,并给我的结果我想:ActiveRecord(Rails):如何在没有关联的Rails中进行自定义(SQL)连接?

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上有更多关联,并且复制这些关联似乎很愚蠢,因此只会优化一个查询才能真正关联。

回答

4

joins可以多种方式使用。

我。加入协会

  1. 嵌套

II。加入使用原始的SQL(你在找什么)

ItemToSku.joins("LEFT JOIN inventory ON item_to_sku.sku_id = inventory.sku_id").where("item_id in (?)", [12345, 67890]) 

注:includes用于预先加载

相关问题