وحدة التحكم في Rails لا تقوم بتحميل النماذج تلقائيًا لـ 2nd DB

StackOverflow https://stackoverflow.com/questions/160954

سؤال

لديّ مشروع 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 هي أن أسماء فئات النماذج هي Camelcase ، في حين أن الملفات التي يقيمون فيها هي Secondcase+Sewrerscore.

لذلك يجب أن تكون فئة "modemodel" في models/legacy_model.rb. بيانك عن "require 'LegacyDataClass'" يشير إلى أن هذا ليس هو الحال ، وبالتالي لا يعرف القضبان كيفية تحميل هذا النموذج تلقائيًا.

نصائح أخرى

لقد كتبت شيئًا لتطبيقًا في العمل يتعامل مع الاتصالات لقواعد البيانات الأخرى في وقت التشغيل ، فقد يكون من الممكن المساعدة.

http://github.com/cherring/connection_ninja

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top