Usando una maschera di ruoli per trovare tutti gli utenti che hanno un certo ruolo
-
29-10-2019 - |
Domanda
Ho usato una maschera di busk in un progetto corrente per tenere traccia dei ruoli utente, ma ora ha una situazione in cui ho bisogno di essere in grado di trovare una ricerca per tutti gli utenti che sono un certo ruolo.
Ho i miei ruoli come così:
ROLES = %w[admin editor moderator contributor]
def roles
ROLES.reject do |r|
((roles_mask || 0) & 2**ROLES.index(r)).zero?
end
end
def roles=(roles)
self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.sum
end
def role_symbols
roles.map(&:to_sym)
end
.
Posso trovare tutti gli utenti con la stessa mappa della stessa bit, ma non sono sicuro di come estrarre un ruolo particolare, in questo caso tutti gli utenti che hanno il "editor" dei ruoli.
Soluzione
on http://railancasts.com/episodes/189-embedded-association , Ryan Bates fornisce aScopo per cercare:
named_scope :with_role, lambda { |role| {:conditions => "roles_mask & #{2**ROLES.index(role.to_s)} > 0"} }
.
Troverai esempi lì.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow