2013-06-01 1 views
10

Я переделываю приложение и переношу данные из старого приложения. Некоторые из названий моделей будут одинаковыми, хотя не все из них.Объединение рельсов в пространствах с именами

Я пишу задачу рейка, чтобы подключиться к старой базе данных, прочитать записи, сделать некоторые вещи и записать результат в новую базу данных. Поскольку некоторые из имен таблиц одних и те же название моделей будет таким же, поэтому я хочу назвать пространство моих моделей, как так

module OldData 
    class Account <ActiveRecord::Base 
     has_many :subcriptions 
     establish_connection $olddb 
    end 

    class Subscription <ActiveRecord::Base 
     belongs_to :account 
     establish_connection $olddb 
    end 
end 

где $ olddb хэш требуется для подключения к старым базам данным

Я могу открыть учетные записи и прочитать их в порядке, но у модели учетной записи нет ассоциации подписки. Последняя документация Rails предполагает, что это должно сработать. но это не так.

Любые советы?

+0

Если следовать конвенции и положить каждую модель в отдельном файле с именем после этой модели, есть высокая вероятность того, что будет Работа. – RocketR

ответ

24

может быть, вы должны попытаться установить имя класса явно

has_many :subcriptions, class_name: 'OldData::Subscription' 

и

belongs_to :account, class_name: 'OldData::Account' 
+6

Это не обязательно, если обе модели находятся в одном пространстве имен. – RocketR

+0

На самом деле вы правы. Но по какой-то причине вам нужно явно указать пространство имен, если модель является пользовательским пространством имен. Может быть, это ошибка? Или, может, я чего-то не хватает. –

+0

Что вы подразумеваете под пользовательским пространством имен? Если у меня есть 'Persistent :: Post' и' Persistent :: Comment', то просто 'Post.has_many: comments'. Работает без опции 'class_name'. Может быть, мы используем разные версии Rails (я на 4.0.0)? – RocketR

Смежные вопросы