Rails усложнил область с помощью запроса на ассоциацию has_many - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь реализовать экран утверждения, в котором есть два модельных здания (здание, подлежащее утверждению) и утверждающий.

Класс здания выглядит следующим образом

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)

Единственная проблема заключается в получении ожидающего подтверждения. Мне нужно проверить, ожидает ли одобрение администраторов, а сотрудники не сделали этого.Отклонить / вернуть его.Любая помощь будет оценена!

...