Validates numericality

il campo e’ un integer.
Nel model: validates :role_number, :district, :duaap,
:numericality => { :greater_than_or_equal_to => 0 },
:allow_nil => true

Se nel form inserisco una stringa non mi da nessun errore, il campo
viene valorizzato a zero.
Ma che cavolo, se il campo e’ un integer e per di piu’ gli dico
validates numericality se inserisco una stringa dovrebbe avvertirmi
che il valore non e’ valido.

Infatti lo fa e serve proprio a quello. Prova a utilizzare una
validazione per ogni campo.

Tante volte i tuoi messaggi mi sembrano più delle tue riflessioni, prova
ad arrangiarti per problemi così banali, in questo caso basterebbe
leggere la documentazione:
http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates

Ciao