Numericality validation strips chars from original entry

I've noticed that if I use the numericality validator and the user enters, for example "1234ABCD" it'll come back with a "not a number" error, but it then fills the input box with "1234", discarding the non- numeric input the user originally put in.

I've seen a similar question about this in this group, but the poster was looking for a way to completely blank the number upon return. I want something different - I'd like the original value to be displayed, which seems more logical to me.

What worries me about having it auto-strip the non-numeric stuff is, if a user has a couple of validation problems in the form, they may fix other ones, not noticing the numeric, which will now happily post because it's been turned into a number automagically by Rails - and maybe not the number that was intended.

I'm afraid it may be impossible since I think it's actually the input parser doing this and not the validator, but does anyone know how to make the original value come back instead of the parsed?

Thanks in advance.


Just off the top of my head and never done it but... could you reuse the params value to repopulate the field if the field has errors? I think it should be possible. Something like:

unless   @your_object.your_attribute = params[:your_object][:your_attribute] if @your_object.errors.on @your_object.your_attribute   render... end

The syntax might be off but you should get it right easily if that's the case.

I'll give that a try. I was hoping for something less "manual" but I can live with this.

I'm sorry but I don't know of a shorter way of doing this.

However, going back to the original problem I think that it might be better to do this in the model itself from a design point of view. I think the model should be able to handle this and leave the controller "unaware" of the problem. In other words, the model should be able to manage itself and take care of the problem. The controller shouldn't need to be involved.