Inherits Reference / Object
Defined as to_s(io) rather than a no-arg to_s : String: string interpolation and IO#<< go through the IO form, so overriding only the no-arg form left "#{error}" printing the default #<ValidationError:0x…> while a direct error.to_s looked correct.
to_s(io)
to_s : String
IO#<<
"#{error}"
#<ValidationError:0x…>
error.to_s