我有一个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!
,这实际上不会重新加载它,或者直到我打开一个新的控制台实例。
因此问题:
答案 0 :(得分:3)
我认为这可能与您的型号名称有关,而不是您的连接。 Rails约定是模型类名称是CamelCase,而它们驻留的文件是小写+下划线。
因此,“LegacyModel”类应位于models/legacy_model.rb
中。您关于"require 'LegacyDataClass'"
的陈述表明情况并非如此,因此Rails不知道如何自动加载该模型。
答案 1 :(得分:1)
我为工作中的应用程序写了一些东西,它在运行时处理与其他数据库的连接,它可能会有所帮助。