2011-05-27 17 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

आपका मॉड्यूल नाम अपवाद है और आप 'अपवाद ::' का उपयोग कर रहे हैं। क्या यह एक टाइपो है? –

उत्तर

11

आप नियंत्रक जहां जुटाने की कोशिश कर रहे हैं में मॉड्यूल की आवश्यकता क्या है अपवाद?

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

उपयोग:
raise Exception::MemberOverFlow.new("member count overflow")

और अगर यह अभी भी काम नहीं करता है, मॉड्यूल "अपवाद" का नाम बदलने की कोशिश क्योंकि अपवाद एक मौजूदा अपवाद वर्ग रूबी में परिभाषित किया गया है।

+0

मैंने पहली बार मूल प्रश्न पर आपकी टिप्पणी को याद किया। एक संभावित टाइपो। यदि यह टाइपो नहीं है, क्योंकि उसके मॉड्यूल को 'अपवाद' (बहुवचन) नाम दिया गया है, इसे 'अपवादों को बढ़ाएं :: सदस्य ओवरफ्लो.न्यू ("सदस्य गणना ओवरफ़्लो")' कहा जाना चाहिए। साथ ही, वह निर्दिष्ट करता है कि फ़ाइल का नाम 'lib/upgrades.rb' है, इसलिए आवश्यक कथन भी बहुवचन होना चाहिए: 'अपवाद' की आवश्यकता है" '। –

5

अपने lib निर्देशिका की सामग्री स्वचालित रूप से रेल 3 में लोड नहीं कर रहे हैं, तो आप config/application.rb में तो जैसे उन्हें निर्दिष्ट करना होगा:

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

शायद आप ऐसा नहीं करना?

7

कोई भी विशेष रूप से यह नहीं कहता कि मूल पोस्ट में क्या गलत था। निम्नलिखित:

raise Exceptions::MemberOverFlow"member count overflow" 

एक विधि के रूप MemberOverFlow इलाज और नहीं है class यह है कि। आपको MemberOverFlow क्लास पर new विधि को कॉल करने की आवश्यकता है, जो amit_saxena के उत्तर बिंदुओं से बाहर है।

वह उत्तर समस्या हल करता है, लेकिन मुझे लगा कि यह समझने योग्य था कि आप क्या कर रहे थे, ताकि भविष्य में आप एक ही समस्या हो सकें, आपको पता चलेगा कि क्या हो रहा था।

संबंधित मुद्दे