7

まさにタイトル通り。Mongoid 3 に関連するものを見つけることができません。私が見つけたものmongoidは、使用していない古いバージョンのMoped.

私はこれを見つけましたが、動作しません:

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

このメソッドは、getWeek 関数を system.js コレクションに追加します。

これはmongoid 3でどのように行うことができますか?

4

1 に答える 1

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

説明:

通常のコレクションであるかのように使用してsystem.jsいます。mongoid次に、新しいドキュメントを追加するだけです。

重要:

値はインスタンスである必要がありMoped::BSON::Codeます。それ以外の場合は文字列として保存されるため、役に立ちません。id は関数の名前である必要があります。create ステートメントで id を指定できなかったため、複数の手順を追加しました。

これを rake タスクに追加するだけで、展開後に必要なすべての機能を mongo に確実に追加できます。

于 2013-06-27T10:40:46.497 に答える