我可以编写此查询,它涉及2个表,并为我提供所需的结果:

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上有20个以上的关联,复制它们似乎很愚蠢,因此为了真正优化一个查询而混淆了真实的关联。

最佳答案

joins可以多种方式使用。

一世。加入协会

  • 单个
  • 多个
  • 嵌套的

  • ii。使用原始SQL联接(您要查找的内容)
     ItemToSku.joins("LEFT JOIN inventory ON item_to_sku.sku_id = inventory.sku_id").where("item_id in (?)", [12345, 67890])
    

    注意:includes用于快速加载

    关于ruby-on-rails - ActiveRecord(Rails): How to do custom (SQL) joins in Rails without an association?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20550348/

    10-13 05:27