Я пытаюсь реализовать экран утверждения, в котором есть два модельных здания (здание, подлежащее утверждению) и утверждающий.
Класс здания выглядит следующим образом
class Building < ApplicationRecord
has_many :approval, as: :approvable
end
Класс утверждающеговыглядит так:
class Approver < ApplicationRecord
belongs_to :approvable, polymorphic: true
scope :rejected, -> { where(approval_status:2) }
scope :returned, -> { where(approval_status:3) }
scope :finally_approved, -> { where(approval_status:1).where(user_id: 1) }
end
#pending = 0 , approved = 1, rejected = 2 , returned = 3
#admin user_id = 1 for final approving
По сути, утверждение выполняется снизу вверх, то есть персонал должен сначала одобрить его, а затем, наконец, администратор утверждает.
Правило простое, если персонал отклоняет/ вернуть его, он будет автоматически помечен как возвращенный / отклоненный, и ему не потребуется одобрение администратора
Мне нужно, чтобы получить здания, которые находятся в состоянии ожидания, окончательно утверждены (выполнены), отклонены (я ужесделал это) и вернул (выполнено)
Я могу получить утвержденные здания, выполнив эту строку
BuildingApproval.joins(:approval).merge(Approval.finally_approved)
это работает, потому что администратор может одобрить его только после того, как его коллеги утвердят его и здания, которыеотклонены / возвращены коллегами, не показаны администратору.
Получить отклоненное и возвращенное сообщение довольно легко, потому что мне просто нужно найтиf одно из утверждений отклонено / возвращено независимо от того, делает ли это администратор / персонал.
BuildingApproval.joins(:approval).merge(Approval.rejected)
Единственная проблема заключается в получении ожидающего подтверждения. Мне нужно проверить, ожидает ли одобрение администраторов, а сотрудники не сделали этого.Отклонить / вернуть его.Любая помощь будет оценена!