Pregunta

He estado usando un grupo de bits en un proyecto actual para hacer un seguimiento de los roles de usuario, pero ahora tiene una situación en la que necesito poder hacer un hallazgo para todos los usuarios que son un papel seguro.

Tengo la configuración de mis roles, así:

  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

Puedo encontrar a todos los usuarios con el mismo mapa del mismo momento, pero no estoy seguro de cómo extraer un papel en particular, en este caso todos los usuarios que tengan los roles "Editor".

¿Fue útil?

Solución

en http://railscasts.com/episodes/189--embedded-association , Ryan Bates proporciona unAlcance para buscar:

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

encontrarás ejemplos allí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top