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