2013-06-27 7 views
7

का उपयोग करके मोंगोड में स्टोर फ़ंक्शन जैसा कि शीर्षक बताता है। मैं Mongoid 3 से संबंधित कुछ भी नहीं ढूंढ पा रहा हूं। मुझे मिली चीजें केवल mongoid के पुराने संस्करणों पर लागू होती हैं जो Moped का उपयोग नहीं करतीं।मोंगोइड 3

मैं इस पाया जाता है और यह काम नहीं करता:

def self.install_javascript 
    getWeekJs = Rails.root.join("lib/javascript/getWeek.js") 
    if collection.master['system.js'].find_one({'_id' => "getWeek"}).nil? 
    collection.master.db.add_stored_function("getWeek", File.new(getWeekJs).read) 
    end 
end 

इस विधि system.js संग्रह करने के लिए एक getWeek समारोह जोड़ना होगा।

यह mongoid 3 में कैसे किया जा सकता है?

उत्तर

5

इसे खींचा!

कोड:

class StoredProcedure 
    include Mongoid::Document 
    store_in collection: "system.js" 

    field :_id, type: String, default: "" 

    def self.test 
    equalsJS = Rails.root.join("lib/assets/javascripts/equals.js") 
    code = Moped::BSON::Code.new(File.new(equalsJS).read) 
    unless where(id: "equals").first 
     proc = new(value: code) 
     proc._id = "equals" 
     proc.save 
    end 
    end 
end 

स्पष्टीकरण:

मैं mongoid में system.js उपयोग कर रहा हूँ के रूप में अगर यह एक सामान्य संग्रह थे। मैं बस नए दस्तावेज़ जोड़ रहा हूँ।

महत्वपूर्ण:

मूल्य एक Moped::BSON::Code उदाहरण अन्यथा यह, स्ट्रिंग के रूप में सहेज लिया जाएगा इस प्रकार बेकार की जरूरत है। आईडी को फ़ंक्शन का नाम होना चाहिए। मैं एक निर्माण कथन में आईडी निर्दिष्ट करने में सक्षम नहीं था, इसलिए मैंने कई चरणों को जोड़ा।

बस यह सुनिश्चित करने के लिए एक रेक कार्य में जोड़ें कि आप तैनाती के बाद सभी आवश्यक कार्यों को मोंगो में जोड़ दें।

+1

क्या आपको वास्तव में संग्रहीत जावास्क्रिप्ट * चलाने के लिए कोई रास्ता मिला है? –

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