我有两个模型。
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 })
)