协会

Budget

has_many :approvers


Approver

belongs_to :budget


需求


检查预算中是否有未分配的批准者。


在其他世界(假设有3个预算)


如果所有3个预算的approvers_count> 0,则应返回false。
如果该预算中有任何一个的approvers_count

我有以下Ruby代码,这导致性能问题,我想将其更改为等效的SQL或ActiveRecord语句:

有问题的代码

budgets.archived(false).includes(:approvers).select do |b| b.approvers.empty? end.any?


我的解决方案没有给出正确的结果

budgets
  .archived(false)
  .where("not exists (select 1 from approvers where approvers.budget_id = budgets.id)")
  .any?


任何建议表示赞赏。


  注意:我正在尝试检查是否有任何预算(在数千个预算中)是否有未分配批准者的预算。

最佳答案

all_budgets_with_no_approvers = Budget.joins('left outer join approvers on budget.id = approvers.budget_id').where(approvers: { budget_id: nil })


这将返回所有未分配批准者的预算。

关于mysql - 给定语句的ActiveRecord等效SQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51151144/

10-09 08:25