2008-09-26 7 views
13

Je voudrais la façon canonique de le faire. Mes recherches sur Google ont été courtes. J'ai un modèle ActiveRecord qui doit correspondre à une base de données différente du reste de l'application. Je voudrais également stocker les nouvelles configurations dans le fichier database.yml.Comment gérer au mieux les connexions de base de données par modèle avec ActiveRecord?

Je comprends que la fonction d'établissement de connexion doit être appelée, mais il n'est pas clair où. Voici ce que j'ai obtenu jusqu'à présent, et cela ne fonctionne pas:

class Foo < ActiveRecord::Base 
    establish_connection(('foo_' + ENV['RAILS_ENV']).intern) 
end 

Répondre

21

En outre, il est une bonne idée de sous-classe modèle qui utilise la base de données différentes, telles que:

class AnotherBase < ActiveRecord::Base 
    self.abstract_class = true 
    establish_connection "anotherbase_#{RAILS_ENV}" 
end 

Et dans votre modèle

class Foo < AnotherBase 
end 

Il est utile lorsque vous devez ajouter ultérieurement les modèles qui accèdent au même, une autre base de données.

5

Heh. J'avais raison! Plus proprement:

class Foo < ActiveRecord::Base 
    establish_connection "foo_#{ENV['RAILS_ENV']}" 
end 

Grand article at pragedave.pragprog.com.

Questions connexes