2013-12-12 90 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用於預先加載

相關問題