Как отфильтровать результаты ассоциации при выполнении вложенной активной загрузки - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь отфильтровать вложенные записи ассоциации при выполнении активной загрузки в моем приложении 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.

...