Rails控制台不会自动为第二个DB加载模型

时间:2008-10-02 05:06:07

标签: ruby-on-rails ruby console require

我有一个Rails项目,它有一个Postgres数据库用于实际应用程序,但需要从Oracle数据库中提取大量数据。

database.yml看起来像

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

oracle_db:
  adapter: oracle
  database: blah blah

我的模型来自Oracle DB上的数据,看起来像

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魔术。
  • 什么是方便的Rails 解决方法

2 个答案:

答案 0 :(得分:3)

我认为这可能与您的型号名称有关,而不是您的连接。 Rails约定是模型类名称是CamelCase,而它们驻留的文件是小写+下划线。

因此,“LegacyModel”类应位于models/legacy_model.rb中。您关于"require 'LegacyDataClass'"的陈述表明情况并非如此,因此Rails不知道如何自动加载该模型。

答案 1 :(得分:1)

我为工作中的应用程序写了一些东西,它在运行时处理与其他数据库的连接,它可能会有所帮助。

http://github.com/cherring/connection_ninja