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.

È stato utile?

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
scroll top