J'ai un modèle appelé Demande de parrainage et table et vues associées. J'ai trois rôles d'utilisateur définis en utilisant enums:Pundit Policy Scope Non implémenté correctement
enum role: { staff: 0, clinician: 1, admin: 2 }
Les utilisateurs appartiennent aux universités, et les universités ont de nombreux utilisateurs du personnel. Mon intention dans de nombreuses parties de mon application est d'utiliser des politiques d'experts pour montrer seulement aux utilisateurs du personnel des enregistrements qui sont associés à d'autres utilisateurs de leur université. J'essaie de le faire pour des demandes de référence par exemple, mais j'ai quelque chose de mal configuré, car il montre à un utilisateur donné toutes les demandes de référence, qu'elles aient été créées par un autre utilisateur appartenant à son université ou non. Qu'est-ce que je fais mal?
Renvoi Politique de demande:
class ReferralRequestPolicy < ApplicationPolicy
class Scope
attr_reader :user, :scope
def initialize(user, scope)
@user = user
@scope = scope
end
def resolve
if user.admin?
scope.all
else
scope.joins(:user).merge(User.where(university: user.university))
end
end
end
def index?
user.staff? or user.admin?
end
end
renvoi demande Modèle:
class ReferralRequest < ApplicationRecord
belongs_to :user, -> { where role: :staff }
belongs_to :patient
has_many :dispatches
has_many :clinicians, through: :dispatches
has_and_belongs_to_many :languages
has_and_belongs_to_many :races
has_and_belongs_to_many :genders
validates :user_id, presence: true
enum status: { created: 0, sent: 1, shared: 2, closed_under_care: 3, closed_not_seeking_care: 4, closed_unresponsive: 5 }
end
préoccupation utilisateur du personnel:
require 'active_support/concern'
module StaffUser
extend ActiveSupport::Concern
included do
belongs_to :university
has_many :patients
has_many :referral_requests
validates :university_id, presence: true, if: :staff?
end
class_methods do
end
end
Université Modèle
class University < ApplicationRecord
has_many :staffs, -> { where role: :staff}, class_name: "User"
has_many :clinicians, through: :lists
has_many :whitelists
belongs_to :market
validates :market_id, presence: true
end