2013-06-27 26 views
7

正如標題所示。我找不到任何與Mongoid 3相關的東西。我發現的東西只適用於mongoid的舊版本,沒有使用Moped使用Mongoid 3在mongodb中存儲函數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 

此方法將添加一個getWeek功能的system.js集合。

這怎麼能在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例如否則將被保存爲字符串,因此沒用。該id需要是該函數的名稱。我無法在create語句中指定id,因此我添加了多個步驟。

只需將其添加到rake任務,以確保在部署後將所有必需的功能添加到mongo。

+1

你有沒有找到一種方法來實際*運行*存儲的JavaScript? –