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