Как изменить имя таблицы ActiveRecord во время выполнения - PullRequest
7 голосов
/ 31 марта 2011

Я изменяю table_name_prefix во время работы приложения rails (может показаться странным, но на самом деле это то, что я хочу).Когда table_name_prefix изменяется для ActiveRecord, я сбрасываю имена таблиц (table_name и quoted_table_name), вызывая reset_table_name, и они меняются ... однако у меня есть другая проблема.

Еслиимя таблицы изменяется, после вызова такой вещи, как count или find, объект ActiveRecord по-прежнему работает с таблицей, которая использовалась ранее.

Как достичь, чтобы сбросить потомка ActiveRecord, чтобы при префиксе, суффикс, имя_таблицы меняется, работает с новыми настройками?

Спасибо за помощь!

1 Ответ

8 голосов
/ 04 апреля 2011

Я нашел объяснение описанному поведению. Хотя reset_table_name сбрасывает имя таблицы, вычисленное из префикса, суффикса (и, возможно, других вещей), таблица инициализируется при использовании модели и создании запроса. ActiveRecord работает "на вершине" Arel, драгоценного камня реляционной алгебры. При использовании модели ActiveRecord создается таблица и заполняется переменная экземпляра @arel_table. Это кэширование для целей производительности. Если кто-то хочет восстановить таблицу arel, ее можно сбросить, вызвав reset_column_information. Мне нужно было иметь и reset_table_name, и reset_column_information, чтобы получить новую таблицу для нового имени таблицы. Возможно, мне придется беспокоиться о производительности, если я часто перезагружаю таблицу.

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