如何在运行时更改ActiveRecord的表名

fif*_*uri 8 activerecord ruby-on-rails-3

我正在改变table_name_prefixrails应用程序的运行期间(可能听起来很奇怪,但实际上这就是我想要的).当I 的table_name_prefix更改通过调用ActiveRecord重置表名(table_namequoted_table_name)时reset_table_name,它们会改变..但是我有另一个问题.

如果表名更改,在调用诸如count或find之类的东西之后,ActiveRecord对象仍然使用之前使用的表进行操作.

如何重置ActiveRecord后代,以便当前缀,后缀,table_name更改时,它与新设置一起使用?

谢谢你的帮助!

fif*_*uri 8

我找到了所描述行为的解释.虽然reset_table_name重置了从前​​缀,后缀(也可能是其他东西)计算的表名,但是在使用模型并生成查询时会初始化表.ActiveRecord作品"在...之上" Arel,一个关系代数宝石.使用ActiveRecord模型时,将创建一个表并填充@arel_table实例变量.此缓存用于性能目的.如果想要重新创建arel表,可以通过调用重置它reset_column_information.我需要同时拥有这两个reset_table_namereset_column_information为了获得新表名的新表.如果我经常重置表格,我可能不得不担心性能问题.