ActiveRecord Je tente de créer dynamiquement une classe et affecter un de plusieurs connexions de base de données à chaque classe. Je travaille avec n'importe où entre deux ou trois bases de données qui changent au fil du temps, par conséquent, j'hésite à stocker chaque chaîne de connexion dans une classe distincte et en hériter au lieu de ActiveRecord :: Base.classe Ruby créer Dynamiquement avec connexion
Ce qui suit renvoie une erreur « RuntimeError: classe anonyme n'est pas autorisée. », Mais je ne suis pas sûr de savoir comment contourner ou s'il existe de meilleures alternatives.
class ClassFactory
def self.create_class(new_class, table, db_connection)
c = Class.new(ActiveRecord::Base) do
db = db_connection
self.table_name = table
establish_connection(:adapter => db.database_type, :host => db.host, :database => db.database, :username => db.username, :password => db.password).connection
end
Module.const_set new_class, c
end
end
par ma lecture de la source, cela ne devrait pas fonctionner; la toute première ligne de 'ActiveRecord :: ConnectionHandling # establish_connection' est' raise 'La classe anonyme n'est pas autorisée. " à moins que name', avant qu'il ne prenne un seul regard sur les paramètres que vous avez passés. Ai-je mal compris quelque chose? – philomory
On dirait que le code ne fonctionnera que dans Rails 3.2 ou plus. [établir la source de connexion] (http://apidock.com/rails/v4.0.2/ActiveRecord/ConnectionAdapters/ConnectionHandler/establish_connection). Donnez-moi une seconde, je vais essayer de le faire fonctionner dans de nouveaux Rails. –
Intéressant, je regardais 'ActiveRecord :: ConnectionHandling # establish_connection', pas' ActiveRecord :: ConnectionPool :: ConnectionHandler # establish_connection'. Je dois aimer les noms similaires pour les choses. – philomory