我在运行rails应用程序期间更改table_name_prefix
(可能听起来很奇怪,但实际上这就是我想要的)。当table_name_prefix
的{{1}}更改时,我通过调用ActiveRecord
重置了表名(table_name
和quoted_table_name
),然后他们会更改..但是我有另一个问题。
如果表名更改,在调用count或find这样的东西之后,ActiveRecord对象仍然使用之前使用过的表。
如何重置reset_table_name
后代,以便当前缀,后缀,table_name更改时,它与新设置一起使用?
感谢您的帮助!
答案 0 :(得分:8)
我找到了所描述行为的解释。虽然reset_table_name
重置从前缀,后缀(也可能是其他东西)计算的表名,但是在使用模型并生成查询时会初始化表。 ActiveRecord
“作为关系代数宝石Arel
的顶部。使用ActiveRecord
模型时,会创建一个表并填充@arel_table
实例变量。此缓存用于性能目的。如果想要重新创建arel表,可以通过调用reset_column_information
来重置它。为了获得新表名的新表,我需要同时拥有reset_table_name
和reset_column_information
。如果我经常重置表格,我可能不得不担心性能。