2013-02-19 55 views
2

我有一個運行在Unicorn上的Sinatra應用程序,它使用Mongoid作爲它的模型。我有幾個結構相同但內容不同的Mongo數據庫,我爲每個用戶在他/她登錄時選擇正確的數據庫。我想知道Mongoid 3.0是否可以這樣做。在運行時在Mongoid 3.0中切換數據庫

回答

3

您可以查詢每次使用前with操作:

Model.with(database: method_to_get_the_db_name).create 
2

如果你想切換數據庫,使用Mongoid.override_database,它是線程安全的。

Mongoid.override_database("client_db_name") # change the database Mongoid.override_database(nil) # reset the database

實施例:

class ApplicationController < ActionController::Base 
    before_filter :switch_database 
    after_filter :reset_database 

    private 

    def switch_database 
    client_ref = params[:client_id] 
    Mongoid.override_database("my_db_name_#{client_ref}") 
    end 

    def reset_database 
    Mongoid.override_database(nil) 
    end 
end 

文檔可以發現here