Pregunta

Dado un modelo que tiene validaciones en el archivo model_name.rb, ¿cómo puedo acceder a esas validaciones manualmente? Me gustaría preparar mi propio sistema de validación de formularios que funcionaría junto con los trucos de Rails incorporados y quiero mantener todo lo más seco posible. Mi principal problema es que necesito hacer validaciones del lado del servidor antes de que cualquiera de los valores de formulario llegue a la base de datos (estoy usando un formulario de varios pasos).

Básicamente me pregunto si hay un método como

User.validations.each do |v|
    puts v.constraint.to_s + " " + v.message
end

¿Hay algo similar a esto?

Gracias de antemano.

¿Fue útil?

Solución

  

Mi principal problema es que necesito hacer   validaciones del lado del servidor antes de cualquiera de   los valores de forma golpean la base de datos (estoy   utilizando un formulario de varios pasos).

Si su modelo no es válido de acuerdo con las validaciones en su archivo de clase, entonces sus datos no se guardarán en la base de datos (a menos que pase false al save Método para suprimir validaciones).

  • Puede preguntar a un modelo si es válido en cualquier momento invocando sus métodos ¿válido? / ¿no es válido? .

Otros consejos

¿El objeto ActiveRecord expone el método de errores después de ser válido? se llama, lo que le da mensajes sobre las validaciones que se violan. ¿Podrías comprobar válido? y luego verifique si alguno de los campos en la parte del formulario en el que se encuentra no es válido. podría hacer algo como esto para un formulario con campos field1 y field2.

unless x.valid?
  [:field1,:field2].each do |field|
    yes_there_was_an_error if x.errors[field]
  end
end

Su mejor apuesta es usar una máquina de estado y almacenar los datos en la base de datos entre los distintos pasos del formulario.

Puedes hacer, por ejemplo. validates_presence_of: username,: if = > proc {| u | u.signup_step > = 2} , donde signup_step es una columna de entero en la base de datos.

Entonces, aunque digas que no quieres almacenarlo en la base de datos entre los formularios, creo que deberías. Si haces esto, puedes usar validaciones regulares y modelos, sin trucos desagradables. Y honestamente, dudo que hacerlo de esta manera sea un problema.

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