I am changing the table_name_prefix during running of a rails application (might sound weird, but really that's what I want). When the table_name_prefix changes for the ActiveRecord I reset the table names (table_name and quoted_table_name) by calling reset_table_name, and they change.. however I have another issue.
If the table name changes, after calling such a thing like count or a find the ActiveRecord object still operates with the table, which was used before.
How can reach to reset an ActiveRecord descendant, so that when the prefix, suffix, table_name changes it works with the new settings?
Thanks for your help!
I found the explanation for the described behavior. Although reset_table_name resets the table name computed from the prefix, suffix (and maybe other things too), the table is initialized when a model is used and a query is generated. ActiveRecord works "on the top of" Arel, a relational algebra gem. When an ActiveRecord model is used a table is created and filled @arel_table instance variable. This caching is for performance purposes. If one wants to recreate the arel table, it can be reset by calling reset_column_information. I needed to have both reset_table_name and reset_column_information in order to get a new table for the new table name. Probably I will have to worry about the performance, if I reset the table often.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With