Как отфильтровать определенные значения в области и скрыть, если есть нежелательный тип?

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

По страховщику:

includes(:budget => :budget_invoices).where('budget_invoices.type IN (?) AND budget_invoices.budget_id = budgets.id', ["BudgetInvoiceByInsurerInput", "BudgetInvoiceByInsurerOutput"])

Когда я использую объем «ByWorkshop», я получаю первый и последний бюджет, что является правильным. Но по какой-то причине, когда я использую область "ByWorkshop" вместе с другой областью видимости; не filter Бюджеты, у которых есть budget_invoices типа страховщика ...

includes(:budget => :budget_invoices).where('budget_invoices.type NOT IN (?) AND budget_invoices.budget_id = budgets.id',["BudgetInvoiceByInsurerInput", "BudgetInvoiceByInsurerOutput"])

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

Хочу предложить использовать рельсы not оператора includes(:budget => :budget_invoices).where.not('budget_invoices.type IN (?) AND budget_invoices.budget_id = budgets.id', ["BudgetInvoiceByWorkshopInput", "BudgetInvoiceByWorkshopOutput"]) ? Я предполагаю, что это будет `` рельсовый способ '' выполнения запроса not

Lucas Wieloch 31.10.2018 13:42

Это не сработало, и я не думаю, что НЕ ВНУТРИ будет проблемой.

Reeenatu 31.10.2018 17:17
0
2
30
0

Другие вопросы по теме