Cómo aplicar las reglas de negocio en los carriles?
-
12-10-2019 - |
Pregunta
Tengo un conjunto de reglas de negocio que tengo que cumplir, como por ejemplo:
- Si current_user no es "admin", entonces no permiten dar y el mensaje de "acceso restringido"
- Si pregunta ha sido contestada entonces no permitir que otro otro mensaje de respuesta y dar "pregunta ya ha sido contestada"
Ahora, todos estos son básicamente:. "Si X es falso entonces el mensaje Y"
Por lo tanto, he hecho este método:
def evaluate_rules rules
rules.each_pair do |state,message|
if not (state == true)
return false,message
end
end
true
end
La intención de ser llamado como esto:
evaluate_rules {
(1==1) => "good", #rule will pass
(1==2) => "bad" #rule will fail
}
Sin embargo, tengo la syntax error, unexpected tASSOC (SyntaxError)
error para las claves hash (1==1)
y (1==2)
.
¿Cómo poner los valores de verdadero / falso en una clave hash?
Además, no puedo evitar pensar que alguien puede haber resuelto este problema "reglas" antes, alguna pista?
Actualizar
Fijo. A veces me frustra Rubí. La llamada debe ser como este:
evaluate_rules Hash.new({
(1==1) => "good", #rule will pass
(1==2) => "bad" #rule will fail
})
parece un poco feo, pero funciona
Solución
Hay varias maneras de lograr esto, pero lo mejor es probablemente usar los validadores Rieles integrados. Estos están configurados para hacer más o menos lo que estás describiendo. En cada modelo, puede crear validaciones, que a continuación, añadir mensajes a una serie de errores si falla la validación. Hay una serie de construido en validaciones, y la capacidad de construir completamente los personalizados. Este es el enfoque que se necesitaría para los dos casos de uso mencionadas anteriormente.
Algunos ejemplos aquí: http://omgbloglol.com/post/ 392895742 / mejorado validaciones-in-carriles-3