. При переходе с Rails 2 на Rails 3 ошибки проверки были перемещены из ActiveRecord ::Error в ActiveModel ::Errors.
В rails 2 ошибка проверки имела тип и сообщение (среди прочего ), и вы могли проверить тип ошибки проверки, выполнив что-то вроде следующего:
rescue ActiveRecord::RecordInvalid => e
e.record.errors.each do |attr, error|
if error.type == :foo
do_something
end
end
end
Но с Rails 3 кажется, что все, кроме недопустимого атрибута и сообщения, было потеряно. В результате единственный способ определить тип — сравнить сообщение об ошибке:
rescue ActiveRecord::RecordInvalid => e
e.record.errors.each do |attr, error|
if error == "foobar"
do_something
end
end
end
Что совсем не идеально (, например. что, если у вас есть несколько проверок, которые используют одно и то же сообщение? ).
Вопрос:
Есть ли лучший способ в rails 3.0 определить тип ошибки проверки?