2013-06-27 3 views
7

タイトルのとおりです。私はモンゴイド3に関連するものを見つけることができません。私が見つけたものは、Mopedを使わなかったmongoidの古いバージョンにのみ適用されます。Mongoid 3を使用してmongodbに関数を格納します。

私はこれを発見し、それは動作しません:

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機能を追加します。

これはどのようにモンゴイド3でできますか?

答えて

5

Nailed it!

コード:

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 

説明:

それは通常のコレクションであるかのように私はmongoidsystem.jsを使用しています。私は単純に新しい文書を追加しています。

重要:

値がそうでなければ、それは役に立たないので、文字列として保存されますMoped::BSON::Codeインスタンスである必要があります。 idは関数の名前である必要があります。私はcreateステートメントでidを指定することができませんでしたので、複数のステップを追加しました。

これをrakeタスクに追加するだけで、デプロイ後に必要なすべての機能がmongoに追加されます。

+1

実際に*保存されているjavascriptを実行する方法が見つかりましたか? –

関連する問題