Comment gérer au mieux les connexions de base de données par modèle avec ActiveRecord?
-
02-07-2019 - |
Question
Je voudrais la façon canonique de faire cela. Mes recherches sur Google ont été courtes. J'ai un modèle ActiveRecord qui devrait mapper vers une base de données différente de celle du reste de l'application. Je souhaite également stocker les nouvelles configurations dans le fichier database.yml.
Je comprends qu'établit_connection devrait être appelé, mais on ne sait pas où. Voici ce que j’ai eu jusqu’à présent et ça ne marche pas:
class Foo < ActiveRecord::Base
establish_connection(('foo_' + ENV['RAILS_ENV']).intern)
end
La solution
En outre, il est judicieux de sous-classer votre modèle utilisant une base de données différente, telle que:
class AnotherBase < ActiveRecord::Base
self.abstract_class = true
establish_connection "anotherbase_#{RAILS_ENV}"
end
Et dans votre modèle
class Foo < AnotherBase
end
Cela est utile lorsque vous devez ajouter des modèles ultérieurs qui accèdent au même, une autre base de données.
Autres conseils
Heh. J'avais raison! Plus proprement:
class Foo < ActiveRecord::Base
establish_connection "foo_#{ENV['RAILS_ENV']}"
end
Excellente publication sur pragedave.pragprog.com .