Con la migrazione da Rails 2 a Rails 3 gli errori di convalida sono stati spostati da ActiveRecord :: Error a ActiveModel :: Errors.
In Rails 2 l'errore di convalida aveva un tipo e un messaggio (tra l'altro) e si potrebbe verificare il tipo di errore di convalida facendo qualcosa di simile al seguente:Come determinare ActiveModel :: Errori tipo di convalida
rescue ActiveRecord::RecordInvalid => e
e.record.errors.each do |attr, error|
if error.type == :foo
do_something
end
end
end
Ma con Rails 3 sembra tutto ma l'attributo e il messaggio non validi sono andati persi. Di conseguenza l'unico modo per determinare il tipo è quello di confrontare il messaggio di errore: (.? Ad esempio, cosa succede se si dispone di diversi convalide che utilizzano lo stesso messaggio)
rescue ActiveRecord::RecordInvalid => e
e.record.errors.each do |attr, error|
if error == "foobar"
do_something
end
end
end
Il che non è affatto l'ideale.
Domanda:
Esiste un modo migliore in Rails 3.0 per determinare il tipo di errore di convalida?
Eventuali duplicati di [? Come verificare che la convalida non è riuscita a ActiveRecord] (http://stackoverflow.com/questions/4119379/how-to-test-which- validation-failed-in-activerecord) – lulalala