执行嵌套预加载时如何过滤关联结果

时间:2019-04-26 08:40:06

标签: ruby-on-rails ruby filtering eager-loading

在Rails应用程序中执行急切加载时,我试图过滤嵌套的关联记录。

我有三种型号

w_flow_step.rb

class WFlowStep < ApplicationRecord
  has_many :work_orders, through: :vendors
  has_many :vendors
end

vendor.rb

class Vendor < ApplicationRecord
  has_many :work_orders
  has_many :w_flow_step, class: 'WFlowStep', foreign_key: 'w_flow_step_id'
end

work_order.rb

class WorkOrder < ApplicationRecord
  belongs_to :w_flow_step
  belongs_to :vendor, optional: true
end

我有40个供应商,w_flow_step = 10,只有两个供应商具有work_order。

做类似的事情

@w_flow_step = WFlowStep.includes(vendors: :work_orders).find(10)
work_orders = @w_flow_step.vendors.first.work_orders

work_orders也包含不属于@w_flow_step的条目,并且

做类似的事情

@w_flow_step = WFlowStep.includes(vendors: :work_order).where(work_orders: { w_flow_step_id: 10 }).find(10)

并访问使用的供应商总数

@w_flow_step.vendors.size # which give me 2

但是我期望它返回否。的供应商= 40 ,并且在执行中

@w_flow_step.vendors.first.work_orders 

我希望它仅返回分配给该供应商的工作订单,并且其w_flow_step_id仅等于10,这就是它要返回的工作订单。

但是我想加载所有供应商,而work_order仅属于@w_flow_step。

0 个答案:

没有答案