如何创建rails 3自定义异常

时间:2011-05-27 13:12:19

标签: ruby-on-rails ruby ruby-on-rails-3

我正在创建一些自定义异常,如下所示

LIB / exceptions.rb

module Exceptions
  class MemberOverFlow < StandardError
  end
  rescue_from MemberOverFlow do |exception|
    redirect_to root_url, :alert => exception.message
  end
end

我用来像这样引发异常。

raise Exception::MemberOverFlow"member count overflow"

它出现以下错误

NoMethodError in MembersController#create

undefined method `MemberOverFlow' for Exception:Class

任何人都可以告诉我什么是问题

感谢

3 个答案:

答案 0 :(得分:11)

您是否要求控制器中的模块尝试引发异常?

require "exception" #or wherever you have placed the module file

使用:
raise Exception::MemberOverFlow.new("member count overflow")

如果它仍然不起作用,请尝试更改模块“Exception”的名称,因为Exception是Ruby中定义的现有异常类。

答案 1 :(得分:7)

没有人特别说出原帖中的错误。以下内容:

raise Exceptions::MemberOverFlow"member count overflow"

MemberOverFlow视为METHOD而不是class。您需要在new课程上调用MemberOverFlow方法,这就是amit_saxena的答案所指出的。

这个答案解决了这个问题,但我觉得值得指出你在语法上做了什么,这样如果你将来遇到类似的问题就会知道发生了什么。

答案 2 :(得分:5)

你的lib目录的内容不会自动加载到rails 3中,你需要在config / application.rb中指定它们:

config.autoload_paths += %W(#{config.root}/lib)

也许你还没有这样做过?