Как отфильтровать указанные значения в области видимости и скрыть, если есть нежелательный тип? - PullRequest
0 голосов
/ 31 октября 2018

Пример: у меня есть 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"])

... Это все еще приносит мне первый и последний бюджет, который неверен, он должен был принести мне только первый бюджет, так как последний содержит значение, которое я не хочу ...

...