1

我有一个 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解决方法
4

2 回答 2

3

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

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

于 2008-10-02T05:24:56.700 回答
1

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

http://github.com/cherring/connection_ninja

于 2009-08-04T03:22:50.770 回答