【问题标题】:ActiveRecord Equivalent SQL for given statement给定语句的 ActiveRecord 等效 SQL
【发布时间】:2018-12-11 13:34:02
【问题描述】:

协会

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?

欢迎提出任何建议。

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

【问题讨论】:

    标签: mysql sql ruby-on-rails postgresql activerecord


    【解决方案1】:
    all_budgets_with_no_approvers = Budget.joins('left outer join approvers on budget.id = approvers.budget_id').where(approvers: { budget_id: nil })
    

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

    【讨论】:

    • 感谢 Rishid,将尝试此解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    相关资源
    最近更新 更多