Domanda

Ho un progetto Rails che ha un database Postgres per l'applicazione reale ma che deve estrarre molti dati da un database Oracle.

database.yml sembra

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

oracle_db:
  adapter: oracle
  database: blah blah

I miei modelli che discendono dai dati su Oracle DB assomigliano a

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

Ora, per abitudine, faccio spesso molto del mio sviluppo iniziale (e questo è sviluppo iniziale) programmando un po 'e poi giocando nella console di Rails. Ad esempio, dopo aver definito tutte le associazioni per LegacyDataClass inizierò a provare cose come a = LegacyDataClass.find (: first); mette a.some_association.name . Inaspettatamente, questo si interrompe con LegacyDataClass non già caricato.

Posso quindi richiedere 'LegacyDataClass' che risolve il problema fino a quando non ho bisogno di ricaricare! , che in realtà non lo ricaricherà, o fino a quando non aprirò un nuovo istanza della console.

Quindi le domande:

  • Perché succede? Chiaramente c'è qualche magia di Rails che non capisco.
  • Qual è la comoda soluzione soluzione alternativa ?
È stato utile?

Soluzione

Credo che questo potrebbe avere a che fare con il nome del tuo modello, piuttosto che con la tua connessione. La convenzione di Rails prevede che i nomi delle classi dei modelli siano CamelCase, mentre i file in cui risiedono sono minuscoli + carattere di sottolineatura.

Il " LegacyModel " la classe dovrebbe quindi essere in models / legacy_model.rb . La tua dichiarazione su " richiedi 'LegacyDataClass' " indica che non è così, e quindi Rails non sa come caricare automagicamente quel modello.

Altri suggerimenti

Ho scritto qualcosa per un'app al lavoro che gestisce le connessioni ad altri database in fase di esecuzione, potrebbe essere di aiuto.

http://github.com/cherring/connection_ninja

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top