Pregunta

Tengo un proyecto de Rails que tiene una base de datos de Postgres para la aplicación real pero que necesita extraer una gran cantidad de datos de una base de datos de Oracle.

database.yml se parece a

development:
  adapter: postgresql
  database: blah blah
  ...

oracle_db:
  adapter: oracle
  database: blah blah

Mis modelos que descienden de los datos en la base de datos de Oracle se ven algo así como

class LegacyDataClass < ActiveRecord::Base

  establish_connection "oracle_db"

  set_primary_key :legacy_data_class_id

  has_one :other_legacy_class, :foreign key => :other_legacy_class_id_with_funny_column_name

 ...
end

Ahora, por costumbre, a menudo realizo gran parte de mi desarrollo temprano (y este es el desarrollo temprano) al codificar un poco y luego jugar en la consola de Rails. Por ejemplo, después de definir todas las asociaciones para LegacyDataClass, comenzaré a probar cosas como a = LegacyDataClass.find (: first); pone un.some_association.name . Inesperadamente, esto muere con LegacyDataClass que no se ha cargado.

Luego puedo requerir 'LegacyDataClass' que soluciona el problema hasta que necesito recargar! , que en realidad no lo volverá a cargar, o hasta que abra una nueva instancia de la consola.

Así las preguntas:

  • ¿Por qué sucede esto? Claramente hay algo de magia de Rails que no entiendo.
  • ¿Cuál es la solución de Rails conveniente ?
¿Fue útil?

Solución

Creo que esto podría tener que ver con el nombre de tu modelo, en lugar de con tu conexión. La convención de Rails es que los nombres de las clases de modelos son CamelCase, mientras que los archivos en los que residen están en minúsculas + guión bajo.

El " LegacyModel " por lo tanto, la clase debe estar en models / legacy_model.rb . Su declaración sobre " require 'LegacyDataClass' " indica que este no es el caso y, por lo tanto, Rails no sabe cómo cargar ese modelo automáticamente.

Otros consejos

Escribí algo para una aplicación en el trabajo que maneja conexiones a otras bases de datos 'en tiempo de ejecución, podría ser de ayuda.

http://github.com/cherring/connection_ninja

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top