Rails Console не загружает модели автоматически для 2-й БД - PullRequest
1 голос
/ 02 октября 2008

У меня есть проект Rails, у которого есть база данных Postgres для реального приложения, но который должен извлечь кучу данных из базы данных Oracle.

database.yml выглядит как

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

oracle_db:
  adapter: oracle
  database: blah blah

Мои модели, которые происходят от данных в БД Oracle, выглядят примерно так:

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

Теперь, по привычке, я часто делаю большую часть своей ранней разработки (и это ранняя разработка), немного программируя и затем играя в консоли Rails. Например, после определения всех ассоциаций для LegacyDataClass я начну пробовать что-то вроде a = LegacyDataClass.find(:first); puts a.some_association.name. Неожиданно это умирает с LegacyDataClass еще не загружен.

Затем я могу require 'LegacyDataClass', который устраняет проблему до тех пор, пока мне не понадобится reload!, который фактически не перезагрузит его, или пока я не открою новый экземпляр консоли.

Таким образом, вопросы:

  • Почему это происходит? Ясно, что есть некоторая магия Рельсов, которую я не понимаю.
  • Что такое удобный Rails Обходной путь ?

Ответы [ 2 ]

3 голосов
/ 02 октября 2008

Я полагаю, что это может быть связано с названием вашей модели, а не с вашим подключением. Соглашение Rails гласит, что имена классов моделей - CamelCase, а файлы, в которых они находятся, - строчные + подчеркивание.

Поэтому класс "LegacyModel" должен быть в models/legacy_model.rb. Ваше утверждение о "require 'LegacyDataClass'" показывает, что это не так, и поэтому Rails не знает, как автоматически загрузить эту модель.

1 голос
/ 04 августа 2009

Я написал что-то для приложения на работе, которое обрабатывает подключения к другим базам данных во время выполнения, это может помочь.

http://github.com/cherring/connection_ninja

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...