Rails控制台不会自动为第二个数据库加载模型
时间:2020-03-06 15:00:37 来源:igfitidea点击:
我有一个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);之类的事情。放入a.some_association.name
。出乎意料的是,此操作死于尚未加载LegacyDataClass。
然后,我可以require'LegacyDataClass'
来解决问题,直到我需要reload!
,这实际上不会将其重新加载,或者直到我打开控制台的新实例为止。
因此,问题是:
- 为什么会这样?显然有一些我不了解的Rails魔术。
- 什么是便捷的Rails解决方法?
解决方案
我认为这可能与型号名称有关,而不是与连接有关。 Rails约定是模型类名称为CamelCase,而它们所在的文件为小写+下划线。
因此," LegacyModel"类应位于models / legacy_model.rb
中。我们关于" require'LegacyDataClass'"
的声明表明情况并非如此,因此Rails不知道如何自动加载该模型。
我为一个正在运行的应用程序编写了一些东西,该应用程序可以在运行时处理与其他数据库的连接。
http://github.com/cherring/connection_ninja