In part of my application I’m using dynamic tables. I’m aware of the
single
thread conditions. I’ve tackled some caveats yet - will post a blog
about
it soon - but there’s one I need help with.
Consider 2 models that are associated: Order and OrderLine where Order
has
many order_lines.
Now we set the table names for them:
Order.table_name=‘v1_orders’
OrderLine.table_name=‘v1_order_lines’
Query:
OrderLine.joins(:order).where(Order.table_name=>{:customer_id=>1}).all
Result: Select v1_order_lines.* FROM v1_order_lines INNER JOIN v1_orders
ON
v1_orders.id=v1_order_lines.order_id WHERE v1_orders.customer_id=1
So far so good
Now we alter the table names:
Order.table_name=‘v2_orders’
OrderLine.table_name=‘v2_order_lines’
and requery:
Query:
OrderLine.joins(:order).where(Order.table_name=>{:customer_id=>1}).all
Result: Select v2_order_lines.* FROM v2_order_lines INNER JOIN
v1_orders
ON v1_orders.id=v2_order_lines.order_id WHERE v2_orders.customer_id=1
Notice the INNER JOIN, it still uses the v1_ prefixes!!
I looks like if there has been some association caching. How can I get
rid
of it?
I tried: ActiveRecord::Base.connection.schema_cache.clear! but without
the
right effect.