Pregunta

Tengo un conjunto de reglas de negocio que tengo que cumplir, como por ejemplo:

  1. Si current_user no es "admin", entonces no permiten dar y el mensaje de "acceso restringido"
  2. 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

¿Fue útil?

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

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