Rails2からRails3への移行に伴い、検証エラーは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には、検証エラーのタイプを判別するためのより良い方法がありますか?