2011-01-18 15 views
11

Así que me gustaría poder agregar una base de datos externa a mi config/database.yml Luego modelar una tabla a partir de ella.cómo hacer rails llamadas a bases de datos externas?

¿Esto es posible? No he podido averiguar cómo.

"Conexión a múltiples bases de datos en diferentes modelos

Las conexiones se crean normalmente a través ActiveRecord::Base.establish_connection y recuperados por ActiveRecord::Base.connection. Todas las clases que heredan de ActiveRecord::Base utilizarán esta conexión. Pero también se puede establecer una conexión específica de clase. Por ejemplo Si Course es un ActiveRecord::Base, sino que reside en una base de datos diferente, sólo se puede decir Course.establish_connection y Course y todas sus subclases se utilice esta conexión en su lugar.

esta característica se implementa manteniendo una conexión grupo en ActiveRecord::Base que es un hash indexado por la clase. Si se solicita una conexión, el método retrieve_connection subirá por la jerarquía de clases hasta que se encuentre una conexión en el grupo de conexiones. "

Respuesta

16

En primer lugar, definir la información de conexión en database.yml:

my_external_db: 
    adapter: mysql 
    username: ... 
    .... 

A continuación, crear el modelo y conectarlo a la base de datos externa

class MyExternalModel < ActiveRecord::Base 
    establish_connection(:my_external_db) 
    set_table_name 'my_external_table' 
end 
+0

¿Tengo que cerrar la conexión después? – Kirby

+1

@Kirby: No creo que quiera hacer eso, o los rieles tendrían que abrir una nueva conexión para cada solicitud. Aquí solo se hace una vez cuando se inicia el servidor. – ryeguy

+0

¡Muchas gracias por esto! me estaba tratando de conectar mi aplicación de rieles a una base de datos externa. muy útil. – Vicer

2

set_table_name se elimina, por lo que en su lugar, debería usar: self.table_name

Cuestiones relacionadas