2011-05-27 87 views
15

我創造了一些自定義異常如下如何創建軌道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 

誰能告訴我

感謝

+2

你的模塊名稱是例外,你正在使用'異常:'。這是一個錯字嗎? – 2011-05-27 13:32:09

回答

11

你需要在你試圖提高控制器模塊是什麼問題例外?

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

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

,如果仍然不行,請嘗試更改模塊「異常」的名字,因爲異常是在Ruby中定義的現有異常類。

+0

我起初錯過了你對原始問題的評論。一個可能的錯字。如果它不是一個錯字,因爲他的模塊被命名爲'Exceptions'(複數),它必須被稱爲'引發異常:: MemberOverFlow.new(「成員計數溢出」)'。另外,他指定文件名是'lib/exceptions.rb',所以require語句也必須是複數:'require「例外''。 – 2012-09-07 21:03:46

5

您的lib目錄中的內容不會自動導軌3加載,你需要像這樣指定它們在配置/ application.rb中:

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

也許你沒有這樣做?

7

沒有一個專門叫了什麼是錯在原崗位。以下:

raise Exceptions::MemberOverFlow"member count overflow" 

被處理MemberOverFlow作爲一種方法,而不是class它。你需要調用new方法對你MemberOverFlow類,這是什麼amit_saxena的回答指出。

這個回答解決了這個問題,但我只是覺得這是值得指出的是你在語法上是做什麼的,這樣如果你在未來也有類似的問題,你會知道發生了什麼事情。