首页 > 解决方案 > 如何过滤范围内的特定值,如果有不需要的类型则隐藏?

问题描述

示例:我有 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的预算。

通过车间:

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”范围与另一个范围一起使用时;过滤具有保险公司类型budget_invoices 的预算...

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

...它仍然给我带来了第一个和最后一个预算,这是不正确的,它应该只给我带来第一个预算,因为最后一个包含我不想要的值...

标签: ruby-on-railsscopeassociations

解决方案


推荐阅读