2013-06-27 20 views
7

Genau wie der Titel vermuten lässt. Ich finde nichts in Bezug auf Mongoid 3. Die Dinge, die ich gefunden habe, gelten nur für alte Versionen von mongoid, die Moped nicht verwendet haben.Store-Funktionen in Mongoid mit Mongoid 3

fand ich dieses und es funktioniert nicht:

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 

Diese Methode gibt eine getWeek Funktion zum system.js Sammlung hinzufügen würde.

Wie kann dies in Mongoid 3 getan werden?

Antwort

5

Nailed it!

Codes:

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 

Erläuterung:

ich die system.js in mongoid bin mit, als ob es eine normale Sammlung waren. Ich füge dann einfach neue Dokumente hinzu.

WICHTIG:

Der Wert muss eine Moped::BSON::Code Instanz sein, sonst wird es als String gespeichert werden, damit nutzlos. Die ID muss der Name der Funktion sein. Ich konnte die ID nicht in einer create-Anweisung angeben, daher habe ich mehrere Schritte hinzugefügt.

Fügen Sie dies einfach zu einer Rake-Aufgabe hinzu, um sicherzustellen, dass Sie alle erforderlichen Funktionen nach der Bereitstellung zu mongo hinzufügen.

+1

hast du einen Weg gefunden, * das gespeicherte Javascript * auszuführen *? –