実際のアプリケーション用の Postgres データベースを持つ Rails プロジェクトがありますが、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の便利な回避策は何ですか?