ruby on rails - formularios - llamar a métodos de validación personalizados en Rails
formularios en ruby on rails (3)
Acabo de actualizar mis rieles a 2.3.4 y noté esto con validaciones: digamos que tengo un modelo simple de empresa que tiene un nombre. nada a eso. Quiero ejecutar mi propia validación:
class Company < ActiveRecord::Base
validate :something
def something
false
end
end
guardar el modelo realmente funciona en este caso. Lo mismo sucede si anulo validate () y devuelvo falso. Me di cuenta de esto en un modelo más complejo en el que mi validación devolvía falsa, pero el objeto aún se guardaba ... Lo probé en un modelo esencialmente vacío y aplicaba lo mismo. ¿Existe una nueva práctica que me falta? Esto no parece ser el caso en algunos de mis códigos de rieles más antiguos.
Solo FYI errors.add_to_base(''error message'')
ha quedado obsoleto en los rieles 3 y fue reemplazado por
errors[:base] << "Error message"
O
errors.add(:base, "Error message")
Sus validaciones se ejecutan cuando usa el método de validate
. Sin embargo, los rieles no dependen del valor devuelto.
Se basa en si hay errores de validación o no. Por lo tanto, debe agregar errores cuando su modelo no se valida.
def something
errors.add(:field, ''error message'')
end
O bien, si el error no está relacionado con un campo:
def something
errors.add(:base, ''error message'')
end
Entonces su modelo no se guardará porque hay errores.
Te confunden las validaciones y las devoluciones de llamada.
Se supone que las validaciones fallarán si hay errores en el objeto, no importa qué devuelva la validación. Las devoluciones de llamada fallan si devuelven falso, independientemente de si agregan algún error al objeto.
Rails usa llamadas válidas? de guardar llamadas que no verifica el resultado de ninguna validación.
Editar: Rails trata de validate :method
como devolución de llamada, ¿pero válido? aún no verifica sus resultados, solo por los errores que agregaron al objeto.
No creo que este comportamiento haya cambiado, pero podría estar equivocado. No creo que alguna vez haya escrito una validación para devolver falso antes.