2008-09-26 10 views
13

Me gustaría la forma canónica de hacerlo. Mis búsquedas de Google han quedado cortas. Tengo un modelo de ActiveRecord que debe asignarse a una base de datos diferente que el resto de la aplicación. Me gustaría almacenar las nuevas configuraciones en el archivo database.yml también.¿Cómo manejar mejor las conexiones de base de datos por modelo con ActiveRecord?

Entiendo que se debe llamar a establish_connection, pero no está claro dónde. Esto es lo que obtuve hasta ahora, y no funciona:

class Foo < ActiveRecord::Base 
    establish_connection(('foo_' + ENV['RAILS_ENV']).intern) 
end 

Respuesta

21

Además, es una buena idea a la subclase su modelo que utiliza diferentes bases de datos, tales como:

class AnotherBase < ActiveRecord::Base 
    self.abstract_class = true 
    establish_connection "anotherbase_#{RAILS_ENV}" 
end 

Y en su modelo

class Foo < AnotherBase 
end 

Es útil cuando se necesita añadir subsiguiente modelos que acceden a la misma, otra base de datos.

5

Heh. ¡Yo tenía razón! Más limpiamente:

class Foo < ActiveRecord::Base 
    establish_connection "foo_#{ENV['RAILS_ENV']}" 
end 

Gran publicación at pragedave.pragprog.com.

Cuestiones relacionadas