Que o framework Ruby on Rails e uma mao na roda para varias das situacoes do cotidiano dos desenvolvedores WEB nao e segredo. No entanto algumas vez e necessario fazer algumas tarefas que nao sao tao comuns, como por exemplo conectar nossa aplicacao em varios bancos de dados.Imagem de www.askqtp.comEntao, vamos la! Mostrarei a voces como fazer o ActiveRecord (Classe para abstrair o nivel de Banco de Dados) conectar-se a multiplos banco de dados relacionais (Em um postagem futuro mostrarei como trabalhar com NoSQL), semelhantes, ou diversos dentre SQLite, MySQL, PostgreSQL, OracleSQL, SQL Server ...Aplicacao de Exemplo: Quero cria uma aplicacao para gerenciar projetos. No entanto quero que a tabela de usuario fique em uma base da dados externa a aplicacao para que outras aplicacoes futuras tambem utilizarem essa base de usuarios unificada.Passo 1: Configurar seu database.ymlO primeiro passo, e configurar seu config/database.yml para realizar suas conexoes, por exemplo, temos este arquivo:# SQLite version 3.x# gem install sqlite3## Ensure the SQLite 3 gem is defined in your Gemfile# gem 'sqlite3'development: adapter: sqlite3 database: db/development.sqlite3 pool: 5 timeout: 5000# Warning: The database defined as "test" will be erased and# re-generated from your development database when you run "rake".# Do not set this db to the same as development or production.test: adapter: sqlite3 database: db/test.sqlite3 pool: 5 timeout: 5000production: adapter: sqlite3 database: db/production.sqlite3 pool: 5 timeout: 5000Este e o padrao de criacao com uma base no SQLite, por padrao configuradas com o nome dos ambientes de execucao, vamos agora montar uma nova configuracao, chamei ela de "database_externa_1" note que faremos conexao com um banco MySQL, o que e perfeitamente possivel, ja que o arduo trabalho de saber como lidar com cada tipo de base de dados e do ActiveRecord. Lembre tambem de referenciar as GENs dos adapters que estiver utilizando, neste exemplo "gem 'sqlite3'; gem 'mysql2';"development: adapter: sqlite3 database: db/development.sqlite3 pool: 5 timeout: 5000test: adapter: sqlite3 database: db/test.sqlite3 pool: 5 timeout: 5000production: adapter: sqlite3 database: db/production.sqlite3 pool: 5 timeout: 5000database_externa_1: adapter: mysql2 encoding: utf8 database: test_db pool: 5 username: root password: root host: localhostPasso 2: Criar uma Classe para manipular a conexaoO segundo passo e criar uma classe que servira para manipular a nova conexao, para isso, primeira vamos criar um arquivo chamado "my_databases.rb" dentro da pasta "config/initializers/", tudo que precisamos agora e criar uma classe que herde a classe ActiveRecord::Base, por exemplo:class ProjectDB < ActiveRecord::Base self.abstract_class = true establish_connection Rails.env.to_symendclass TestDB < ActiveRecord::Base self.abstract_class = true establish_connection :database_externa_1endMuita atencao neste ponto!!! Porque eu criei duas classe?!Basicamente por organizacao e simplicidade, para que cada modelo fique explicitamente vinculado a qual conexao ele pertence!A primeira classe "ProjectdDB" faz referencia as conexoes padroes (:development, :test, :production) em SQLite. Note no valor que e passado ao metodo "establish_connection" que e Rails.env.to_sym.A segunda classe "TestDB" faz referencia a nossa base de dados externa em MySQL.Obs:. "self.abstract_class = true" significa dizer que a classe e abstrata, ou seja, nao pode ser instanciada so herdada.Neste ponto ja possuimos toda a nossa aplicacao configurada para trabalhar com base de dados distintas. Agora mostrarei atraves de exemplos como devemos trabalhar.Exemplo 1: Criar