Como lidar melhor com conexões de dados por-modelo com ActiveRecord?
-
02-07-2019 - |
Pergunta
Eu gostaria a forma canônica para fazer isso. Minhas pesquisas do Google vêm-se curto. Eu tenho um modelo ActiveRecord que devem mapear para um banco de dados diferente do que o resto da aplicação. Eu gostaria de armazenar as novas configurações no arquivo database.yml também.
Eu entendo que establish_connection deve ser chamado, mas não está claro onde. Aqui está o que eu tenho até agora, e ele não funciona:
class Foo < ActiveRecord::Base
establish_connection(('foo_' + ENV['RAILS_ENV']).intern)
end
Solução
Além disso, é uma boa idéia para subclasse o modelo que utiliza banco de dados diferente, como:
class AnotherBase < ActiveRecord::Base
self.abstract_class = true
establish_connection "anotherbase_#{RAILS_ENV}"
end
E no seu modelo
class Foo < AnotherBase
end
É útil quando você precisa adicionar modelos posteriores que acessam o mesmo, outro banco de dados.
Outras dicas
Heh. Eu tinha razão! Mais limpa:
class Foo < ActiveRecord::Base
establish_connection "foo_#{ENV['RAILS_ENV']}"
end
Great post em pragedave.pragprog.com .