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

时间:2011-03-30 23:56:24

标签: ruby-on-rails-3 activerecord

我在运行rails应用程序期间更改table_name_prefix(可能听起来很奇怪,但实际上这就是我想要的)。当table_name_prefix的{​​{1}}更改时,我通过调用ActiveRecord重置了表名(table_namequoted_table_name),然后他们会更改..但是我有另一个问题。

如果表名更改,在调用count或find这样的东西之后,ActiveRecord对象仍然使用之前使用过的表。

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:8)

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