2010-09-26 7 views
2

Le tableau est un modèle MongoId qui doit dinamically carte à différentes bases de données/tablesquel est l'équivalent de ActiveRecord # establish_connection dans Mongoid?

# app/models/table.rb 
class Table 
    include Mongoid::Document 
end 

# in app/controllers/some_controller.rb 
def index 
    Table.connection.database = :other_database # <- How to do this ??? 
    Table.table_name = params[:id] # <- How to do this ??? 
    @records = Table.all 
end 

Je veux la classe Table à:

  1. être configuré par demande de différentes bases de données (sur le même serveur MongoDB connexion) en fonction de l'utilisateur actuellement connecté dans
  2. même pour le nom de table

EDIT
Je sais sur:

Mongoid.configure do |config| 
    name = "control_development" 
    host = "localhost" 
    config.master = Mongo::Connection.new.db(name) 
    config.slaves = [ 
    Mongo::Connection.new(host, 27018, :slave_ok => true).db(name) 
    ] 
    config.persist_in_safe_mode = false 
end 

MAIS, ça marche pour certains modèles (?):

# like this i mean 
    class User 
    include Mongoid::Document 

    configure do |config| # configure only this model's connection 
    name = "other_control_development" 
    host = "localhost" 
    config.master = Mongo::Connection.new.db(name) 
    config.slaves = [ 
      Mongo::Connection.new(host, 27018, :slave_ok => true).db(name) 
    ] 
    config.persist_in_safe_mode = false 
    end 

end 

Répondre

1

Vous pouvez vous connecter à plusieurs bases de données à l'aide de ce.

config Exemple: https://github.com/mongoid/mongoid/blob/master/spec/config/mongoid_with_multiple_mongos.yml

Dans votre modèle:

set_database :secondary 

Vous ne pouvez pas échanger des bases de données actuellement à l'exécution de la façon dont vous voulez. Ceci est sur la liste de todo si donc gardez un oeil sur elle.

+2

Malheureusement, le fichier que vous avez lié n'existe plus, ce qui invalide quelque peu ce commentaire. : / – masukomi