set_table_name работает только один раз? - PullRequest
1 голос
/ 31 августа 2011

Я пытаюсь использовать set_table_name, чтобы использовать одну универсальную модель для пары разных таблиц.Однако создается впечатление, что имя set_table работает с классом только один раз за сеанс приложения.Например, в консоли rails 3 (ruby 1.8.7) происходит следующее:

GenericModel.set_table_name "table_a"
puts GenericModel.table_name # prints table_a
pp GenericModel.column_names # prints the columns associated with table_a

GenericModel.set_table_name "table_b"
puts GenericModel.table_name # prints table_b
pp GenericModel.column_names # still prints the columns associated with table_a

В настоящее время я нашел обходной путь - добавить .from (table_b), чтобы запросы не выдавали ошибкус 'table_b.id не существует!'потому что запрос все еще думает, что это FROM table_a.

Могут ли другие воспроизвести проблему?Это предполагаемое поведение set_table_name?

UPDATE

Добавление

Model.reset_column_information

после set_table_name заставляет модель работать так, как я ожидаю.Ссылка найдена в http://ar.rubyonrails.org/classes/ActiveRecord/Base.html#M000368

Ответы [ 2 ]

1 голос
/ 31 августа 2011

Это, вероятно, недокументированное ограничение. После выполнения SHOW FIELDS FROM, откуда поступают результаты из column_names, он обычно кэшируется, по крайней мере, на время запроса. Если необходимо, попробуйте использовать консольный метод reload! для сброса настроек.

0 голосов
/ 31 августа 2011

ваш выбор

rename_table

больше информации на AR TableDefinition

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