views:

31

answers:

1

I'm trying to access the type attribute of an ActiveRecord::Error object. The reason I'm doing this is because I want to redirect a user to a different page depending on the type of validation that failed (an attribute can fail validation in several ways, so the attribute itself is insufficient).

The only way I've found that I can do this is:

obj.errors.instance_variable_get(:@errors)["attr"][0].type

which is just plain nasty. Is there a better way?

+1  A: 

Looks like your best bet is to extend ActiveRecord::Errors.

class ActiveRecord::Errors
  def error_type(attr)
    @errors[attr] && @errors[attr].first.type
  end
end
wuputah
Thanks. I've also found an undocumented public method called each_error, but I like your approach better.
Martin Gordon