Rails:如何使用has_many相关表进行高级查询



我有两个模型。

class Revision < ApplicationRecord
has_many :revision_approvals
end
class RevisionApproval < ApplicationRecord
belongs_to :revision
end

修订可以有许多修订审批。RevisionApproval具有角色(字符串(和决策(枚举整数(字段。角色可以是process_reresponsible或process_coordinator。process_coordinator角色高于process_reresponsible角色。修订批准需要流程协调员的决定。如果process_coordinator尚未做出任何决定,则修订将保持等待批准状态。如果修订审批的角色是process_cordinator,则根据process_cordiinator的决定,修订的状态从待审批变为已批准或已拒绝。我想要具有待审批状态的修订。如何使用单个查询完成此操作?

TL;DR

属于修订的修订审批不应具有process_coordinator角色。这包括没有任何修订批准的修订。

例如:

修订表:

revision_id是否有任何修订审批
577
576错误
16
566
384

如果您想要所有修订:

Revision.all

如果您想要具有角色revision_approvement的修订,则具有角色";process_reresponsible":

Revision.joins(:revision_approvals).where(role: "process_responsible")

Revision.joins(:revision_approvals).where("revision_approvals.role = ?",  "process_responsible")

如果您想要具有角色revision_approvement的修订,则具有角色";process_ responsible";和process_reresponsible 0:

Revision.joins(:revision_approvals).where("revision_approvals.role = ? AND revision_approvals.decision = ?",  "process_responsible", 0)

未修订的修订_批准:

Revision.includes(:revision_approval).where(revision_approvals: { id: nil })

这将返回修订_approval不是process_coordinator 的所有修订

Revision.joins(:revision_approvals).where("revision_approvals.role != ?",  "process_coordinator")

下面的查询返回我想要的记录。

Revision.where.not(
id: Revision.joins(:revision_approvals)
.where(revision_approvals: { role: :process_coordinator })
)

最新更新