Suponiendo como ejemplo que tenemos dos modelos (Post y Comment) y este último está localizado en una base de datos externa, se puede configurar rails de la siguiente forma:
1) Primero, creamos un fichero de configuración para la conexión a la nueva base de datos (config/external_database.yml).
development:
adapter: mysql
database: test
username: root
password:
production:
adapter: mysql
database: test
username: root
password:
2) Después, creamos un módulo para encapsular la lectura del fichero y la nueva conexión.
module ExternalDatabase
def self.included(base)
config = YAML.load(File.open('config/external_database.yml'))
if config and ENV['RAILS_ENV']
base.establish_connection(config[ENV['RAILS_ENV']])
else
raise 'External Database not configured'
end
end
end
3) Por último, incluimos en los modelos que van a la base de datos externa el módulo que hemos creado.
class Comment < ActiveRecord::Base
include ExternalDatabase
belongs_to :post
end
Con esto ya podemos utilizar los modelos aunque cada uno esté en una base de datos diferente.
Comment.find(:all, :include => :post)
4 comentarios:
Interesante... ;)
Una pregunta, ¿no es necesario volver a configurar la base de datos a la "buena" cuando deje ese modelo y vaya a otro? Por decirlo de otro modo restaurar la configuracion a una "por defecto"
Igual la configuración que hace el modulo es local al modelo y no es necesario, no lo sé.
:) Como dice Victor... interesante
No, no hace falta reconfigurar nada, puedes tener las dos simultáneamente :)
Si, probablemente lo sea
Publicar un comentario