Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

418
Views
Ruby CanCanCan búsqueda inversa de usuarios, ¿una forma más rápida de hacer esto?

He extendido el modelo de usuario para permitirme hacer .can? controles sobre el usuario.

 class User < ApplicationRecord def ability @ability = Ability.new self end delegate :can?, :cannot?, :to => :ability end

Esto me permite hacer cosas como @some_user.can? :edit, Book y obtener un resultado. (El ayudante de vista cancan, pero en el modelo). Esto funciona muy bien.

Sin embargo, me gustaría poder hacer lo contrario y obtener todos los usuarios que pueden realizar una acción.

Ejemplo: Dame todos los usuarios que pueden: editar, Libros. User.can? :edit, Book que devuelve una colección de registros activa.

Para que esto funcione, hice esto;

 class User < ApplicationRecord def self.can? sym, obj, *args uids = [] User.all.each do |user| uids << user.id if user.can? sym, obj, args end User.where id: uids end end

Si bien esto funciona, se siente realmente asqueroso ya que itera a través de cada usuario y me preocupa la escala ... ¿hay una manera más rápida de hacer esto?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

sugiero combinar cancan con rolify gem , con rolify podrías preconfigurar roles para los usuarios, entonces tu problema se convertirá en una consulta para los usuarios que tienen el edit Book role

 member_user.add_role :read, Book admin_user.add_role :edit, Book # query User.with_role(:edit, Book) # [admin_user] User.without_role(:edit, Book) # [member_user]
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!