Quiero crear una función de validación personalizada que no permita que un campo se guarde vacío/nulo solo si el campo actual no está vacío en la base de datos. ¿Cómo puedo acceder al valor de la base de datos (valor anterior) en la función de validación? Puedo acceder al nuevo valor usando self.name_of_field.Rieles: compare el valor antiguo y el nuevo valor durante la validación para editar
Esto es lo que tengo en este momento
validate :image_remote_url_change
def image_remote_url_change
if self.image_remote_url.blank? and self.image_remote_url_changed?
errors.add(:field, "can't be blank once set")
return false
end
end
En este momento si trato de editar un objeto existente, no va a aceptar un nuevo valor de vacío, pero cuando se crea un nuevo objeto que va a decir "puede 't estar en blanco una vez configurado ", aunque el valor anterior nunca se estableció.
+1. Schneems, de Heroku, tiene un [breve artículo] (http://schneems.com/post/28425724540/get-previously-saved-changes-in-rails) discutiendo el método previous_changes, que también podría ayudarlo – stephenmurdoch
Doesn ' ¿Pero esto solo funciona si el objeto realmente cambió? como en que se guardó con éxito. Solo estoy haciendo esto en un paso de validación –
@glumbo pruébelo y vea – stephenmurdoch