ruby-on-rails-3 – 获取现有Rails错误类的列表,以便重新使用/继承

通常我需要抛出一个自定义的错误。就像当由于参数不匹配而无法找到资源时。

我更倾向于抛出现有的错误,或抛出一个从现有错误继承的错误。这样,我不会引入已经定义并可以完美使用的错误类(DRY)。但它也允许通过继承和简单地改变一两个字来保持措辞和风格相同,以澄清与原始错误的区别。

例如:

Foo.new
Foo.some_external_id = nil
Foo.fetch_external_resource
# => InvalidOptions: Calling Foo#fetch_external_resource with nil is invalid

我确定已经定义了这样的错误。其实在读了很多行的代码之后,我发现我的MongoID驱动有Mongoid :: Errors :: InvalidOptions:调用document#find和nil无效。

Ruby Core和Ruby on Rails中有可用的错误类列表吗?有没有办法得到这样一个列表,您当前的项目?

是否可以重新使用和/或继承现有错误,还是应该自行维护自定义集?

这里有一个很充分的解决方案:http://www.ruby-forum.com/topic/158088

由于这个问题没有得到答复,而是在Google搜索结果的顶端,我决定把Frederick Cheung的解决方案包起来,并将其发布在这里。

在lib / tasks / exceptions.rake中删除以下内容

namespace :exceptions do
  task :list => :environment do
    exceptions = []

    ObjectSpace.each_object(Class) do |k|
      exceptions << k if k.ancestors.include?(Exception)
    end

    puts exceptions.sort { |a,b| a.to_s <=> b.to_s }.join("\n")
  end
end

运行它:

bundle exec rake exceptions:list

如果您仍然在Rails 2上,或者不使用Bundler,请退出bundle exec

这个列表可能是足够的,但并不详尽。例如,ActiveResource定义了几个异常,例如ActiveResource :: ConnectionError和ActiveResource :: TimeoutError,当我运行此任务时不会出现。也许别人可以启发我为什么。

http://stackoverflow.com/questions/6521544/getting-a-list-of-existing-rails-error-classes-for-re-use-inheritance

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:ruby-on-rails-3 – 获取现有Rails错误类的列表,以便重新使用/继承