Tengo usuarios con muchos roles y quiero marcar esos roles con números o números de prioridad.
Ex:
Administrador - 4
Cliente - 3
Usuario - 2
Invitado - 1
en lugar de agregar una nueva columna en mi tabla de roles que se verá así
| identificación | nombre | número_de_prioridad |
|---|---|---|
| 1 | Administración | 4 |
| 2 | Cliente | 3 |
| 3 | Usuario | 2 |
| 4 | Huésped | 1 |
Me preguntaba si podría hacerlo en mi clase de modelo de roles para no tener que crear una migración a mi tabla y convertirla en un valor constante. ¿Es esto posible?
Debería ser tan simple como:
class User def priority_num case name when 'Admin' 4 when 'Client' 3 when 'User' 2 when 'Guest' 1 else raise StandardError.new "#{name} does not have a priority_num configured" end end endSin embargo, probablemente agregaría la columna yo mismo en caso de que esto se expanda más y para mantenerla consultable sin tener que duplicar las reglas en las herramientas de informes externas.
Puede usar enum para facilitar la identificación de roles en su modelo sin agregar una nueva migración.
enum priority_num: {guest: 1, user: 2, client: 3, admin: 4} User.first.priority_num devolverá "admin"
Puede comparar para verificar si el usuario es administrador de esta manera:
user.priority_num == "admin"@aRtoo
enum priority_num: {guest: 1, user: 2, client: 3, admin: 4} user = User.first user.read_attribute_before_type_cast(:priority_num)le da un número entero de estado de enumeración