【问题标题】:Rails Console Doesn't Automatically Load Models For 2nd DBRails 控制台不会自动为第二个数据库加载模型
【发布时间】:2010-09-14 17:27:53
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails ruby console require


    【解决方案1】:

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

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

    【讨论】:

    • Gaaaaaaaah,你能说出谁为了自己的利益而使用过多的 Java 吗?我没有使用生成器,因为我认为我不需要自动生成的迁移,然后我应用了 Java“文件名 = 类名 + 扩展”约定而不考虑它。谢谢一百万!
    【解决方案2】:

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

    http://github.com/cherring/connection_ninja

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-07
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      • 2014-09-12
      • 1970-01-01
      • 2021-12-18
      相关资源
      最近更新 更多