active record validations with self and callback