2011-09-16 19 views
49

क्या मॉड्यूल में before_save कॉलबैक को परिभाषित करना संभव है? इस तरह की है कि इस तरह एक वर्ग के साथ:क्या मॉड्यूल में 'pre_save' कॉलबैक को परिभाषित करना संभव है?

class Model 
    include MongoMapper::Document 
    include MyModule 
end 

और इस तरह एक मॉड्यूल: किसी भी Model वस्तुओं सहेजे जाते हैं इससे पहले कि

module MyModule 
    before_save :do_something 

    def do_something 
    #do whatever 
    end 
end 

do_something कहा जाएगा? मैंने इसे इस तरह से आजमाया है लेकिन undefined method 'before_save' for MyModule:Module प्राप्त करें।

क्षमा करें अगर यह कुछ आसान है - मैं रूबी और रेल के लिए नया हूं।

उत्तर

95

रूबी में ऑन रेल्स < 3 (रेल के बिना सुविधाओं, केवल रूबी)

module MyModule 
    def self.included(base) 
    base.class_eval do 
     before_save :do_something 
    end 
    end 

    def do_something 
    #do whatever 
    end 
end 
ऑन रेल्स> = 3 (रेल के साथ Concern सुविधा)

रूबी में

module MyModule 
    extend ActiveSupport::Concern 

    included do 
    before_save :do_something 
    end 

    def do_something 
    #do whatever 
    end 
end 
+1

पूरी तरह से काम करता है - धन्यवाद! – Russell

+0

रेल के लिए दृष्टिकोण <3 रेल में काम नहीं करेगा> = 3? मैं ऐसा कर रहा हूं और मेरा 'pre_validation' कॉलबैक नहीं कहा जाता है। – Bradley

+0

यह भी काम करेगा। –

4

एक मॉड्यूल की included विधि आपको जो चाहिए वह हो सकती है।

http://www.ruby-doc.org/core-2.1.2/Module.html#method-i-included

+0

यह उत्तर बिंदुओं को एक बहुत उपयोगी दिशा में, लेकिन इस स्थिति में 'शामिल' विधि का उपयोग करने के बारे में एक संक्षिप्त कोड उदाहरण और/या चर्चा का उपयोग कर सकते हैं। – Jessa

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