Использование классов ActiveRecord с устаревшими таблицами - PullRequest
1 голос
/ 07 января 2011

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

class Frt < ActiveRecord::Base
  establish_connection :legacy
  set_primary_key "point"
end

Когда я достигаю точки в своем коде, где я знаю имя таблицы, я могу позвонить:

Frt.set_table_name "table"
t = Frt.find_by_sql("blah")
something = t.field_name + t.other_field_name
etc...

Проблема в том, что я понял, что это привязывает доступные имена полей к любой таблице, которую я выбираю первой. Если я попытаюсь изменить таблицу другим вызовом метода `set_table_name ', он изменит атрибут для класса, но любые новые экземпляры будут по-прежнему иметь тот же набор полей, что и первый. Пока что в моем приложении мне больше ничего не нужно, но я расширяю программу таким образом, чтобы я знал, что она кусает меня по дороге.

Я пробовал `Frt.send: set_table_name" new_table "', надеясь, что это заставит ActiveRecord снова сделать свою магию. Это не так.

Кто-нибудь может подсказать, как я могу сохранить удобство ActiveRecord, но заставить его динамически переназначать свои поля для любой таблицы, которую мне нужно загрузить?

Ответы [ 3 ]

1 голос
/ 08 января 2011

Я никогда не использовал его, но Magic Model Generator утверждает, что создает модели для таблиц автоматически.

1 голос
/ 21 февраля 2011

Извините, что отвечаю на свой пост, но, думаю, я не очень хорошо это объяснил.В случае, если кто-то еще придет после этого, мне нужно было вызвать метод «Frt.reset_column_information».Я возвращался к этой проблеме и просто сбросил все методы класса ActiveRecord, и обнаружил, что один скрывается в списке.

0 голосов
/ 07 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...