Пример: у меня есть 2 бюджета, каждый из которых has_many budget_invoices
, с разными типами каждый ...
Budget.first.budget_invoices.map{|x| x.type}
["BudgetInvoiceByWorkshopInput"]
Budget.last.budget_invoices.map{|x| x.type}
["BudgetInvoiceByInsurerInput", "BudgetInvoiceByWorkshopOutput"]
В своей области я хочу отфильтровать бюджеты, которые имеют только budget_invoices
типа мастерская / страховщик .
ByWorkshop:
includes(:budget => :budget_invoices).where('budget_invoices.type IN (?) AND budget_invoices.budget_id = budgets.id', ["BudgetInvoiceByWorkshopInput", "BudgetInvoiceByWorkshopOutput"])
ByInsurer:
includes(:budget => :budget_invoices).where('budget_invoices.type IN (?) AND budget_invoices.budget_id = budgets.id', ["BudgetInvoiceByInsurerInput", "BudgetInvoiceByInsurerOutput"])
Когда я использую область действия «ByWorkshop», результат, который я получаю, является первым и последним бюджетом, который является правильным. Но по какой-то причине, когда я использую область «ByWorkshop» вместе с другой областью действия; Фильтр от до Бюджеты, в которых есть budget_invoices типа страховщика ...
includes(:budget => :budget_invoices).where('budget_invoices.type NOT IN (?) AND budget_invoices.budget_id = budgets.id',["BudgetInvoiceByInsurerInput", "BudgetInvoiceByInsurerOutput"])
... Это все еще приносит мне первый и последний бюджет, который неверен, он должен был принести мне только первый бюджет, так как последний содержит значение, которое я не хочу ...