2009-09-27 13 views
8

मैं एक प्रवास के अंदर एक विधि को परिभाषित करने की कोशिश कर रहा हूँ, लेकिन मैं एक अपरिभाषित विधि त्रुटि हो रही है:डिफाइनिंग तरीकों

undefined method 'do_something_specific' for #<ActiveRecord::ConnectionAdapters::SQLite3Adapter:0x4868018> 

मैं नहीं बल्कि इसे कहीं और परिभाषित नहीं चाहते हैं, क्योंकि यह 'नहीं करता है टी वास्तव में शेष एप्लिकेशन से संबंधित नहीं है, बस यह विशिष्ट माइग्रेशन।

class DoSomethingSpectacular < ActiveRecord::Migration 

    def self.up 
    do_something_specific(1, 2) 
    end 

    def self.down 
    end 

private 

    def do_something_specific(p_1, p_2) 
    # something happens here... 
    end 

end 

मैं यहाँ कुछ याद आ रही हूँ:

स्पष्ट है कि, मेरी माइग्रेशन तरह दिखता है? मैं इसे इस तरह क्यों परिभाषित नहीं कर सकता?

उत्तर

8

जैसा कि आप त्रुटि संदेश से देख सकते हैं कोड आपके माइग्रेशन क्लास के भीतर से नहीं बल्कि कनेक्शन एडाप्टर के अंदर से नहीं कहा जाता है। मुझे यकीन है कि नहीं कर रहा हूँ, लेकिन यह छोटा सा परिवर्तन काम करना चाहिए:

class DoSomethingSpectacular < ActiveRecord::Migration 

    def self.up 
    DoSomethingSpectacular.do_something_specific(1, 2) 
    end 

    def self.down 
    end 

private 

    def self.do_something_specific(p_1, p_2) 
    # something happens here... 
    end 

end 

ध्यान दें कि मैं अपने विधि स्थिर बना दिया है और एक स्थिर तरीके से कहा जाता है। यह किसी भी वर्ग के दायरे के मुद्दों को दूर करना चाहिए।

+0

हाँ मुझे समझ में नहीं आया कि यह एडाप्टर के भीतर से क्या कह रहा था, लेकिन मुझे लगा कि यह अभी भी इसके दायरे में होना चाहिए। वैसे भी, अब मुझे कक्षा के लिए एक त्रुटि अपरिभाषित विधि 'do_something_specific' मिलती है: कक्षा –

+0

डी ओह क्षमा करें। चूंकि 'self.up' एक स्थैतिक विधि है,' वर्ग 'के लिए कॉल' कक्षा 'वापस कर देगी, न कि' DoSomethingSpectacular'। मैंने नमूना कोड अपडेट किया। – Koraktor

+2

मुझे लगता है कि आप सुरक्षित रूप से 'DoSomethingSpectacular' को हटा सकते हैं। self.up में – khelll

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