ruby-on-rails - ActiveRecord(Rails): How to do custom (SQL) joins in Rails without an association?

标签 ruby-on-rails activerecord

我可以编写此查询,它涉及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/

    相关文章:

    ruby-on-rails - 橄榄球运动员的 Rails 模型关系

    mysql - ActiveRecord > MySQL 适配器 > 区分大小写

    ruby-on-rails - 您如何保持业务规则 DRY?

    ruby-on-rails - 如何在 Rails 7 中导入 Tailwind 插件

    ruby-on-rails - 使用 Cygwin 挂起的 Heroku 工具带登录

    ruby-on-rails - 从事件记录中删除括号和引号

    ruby-on-rails - 哪个 Rails 投票系统 gem 具有以下功能?

    ruby-on-rails - 将 Activerecord 数据库迁移到 Mongoid

    ruby-on-rails - 如何只找到至少发表过一条评论的用户

    ruby-on-rails - Rails : How to query time range, 不是日期,activerecord 中模型的值