Question

J'utilise un massacre dans un projet actuel pour garder une trace des rôles utilisateur, mais j'ai maintenant une situation où je dois être en mesure de faire une recherche pour tous les utilisateurs qui sont un certain rôle.

J'ai mes rôles configurés comme tel:

  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

Je peux trouver tous les utilisateurs avec exactement la même carte de bits, mais je ne sais pas comment extraire un rôle particulier, dans ce cas tous les utilisateurs qui ont les rôles "éditeur".

Était-ce utile?

La solution

Sur http://railscasts.com/episodes/189-embedded-association, Ryan Bates fournit une portée à la recherche:

named_scope :with_role, lambda { |role| {:conditions => "roles_mask & #{2**ROLES.index(role.to_s)} > 0"} }

Vous y trouverez des exemples.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top