在结盟-d id上使用自定义联接时访问相关记录

问题描述 投票:0回答:1

我在Rails应用中有两个模型,分别为OrganizationWarehouseWarehouse中的条目通过Organization(“自有”仓库)或Warehouse.organization_id(“委派”仓库)属于Warehouse.delegated_to_organization_id中的条目。

用例要求我遍历所有仓库及其“负责任”的组织:“委托”组织(如果存在),否则为“拥有”组织。但是,用例要求我将所有仓库按组织分组并按批次(1)执行,这导致我采用这种方法:

def organizations
  Organization.joins(warehouse_join)
end

def warehouse_join
  <<~SQL
    INNER JOIN warehouses
    ON coalesce(
      warehouses.delegated_to_organization_id,
      warehouses.organization_id,
      -1
    ) = organizations.id
  SQL
end

但是,ActiveRecord似乎忽略了联接:organizations.first.warehouses总是产生[],而用ActiveRecord::Base.connection.execute(organizations.to_sql.gsub('"organizations".*', '*')).to_a执行查询时将显示warehouses表中的联接字段。

我在做什么错,我该怎么做?


((1)数据量太大,无法将所有内容都读取到内存中,因此实际查询将成批执行(已附加limit。]]

我在Rails应用中有两个模型,组织和仓库。仓库中的条目通过Warehouse.organization_id(“自有”仓库)或仓库属于组织中的条目。...

ruby-on-rails join rails-activerecord coalesce
1个回答
0
投票

organizations.first.warehouses将仅通过warehouses提取organization_id。您的warehouse_join不会影响这种关系。

© www.soinside.com 2019 - 2024. All rights reserved.