How to clear ActiveRecord query cache on associations with dynamic table

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.

Thanks

Model.uncached do
Model.do.work
end

Unfortunately the Model.uncached block does not work.

I tried ActiveRecord::Base.connection.disable_query_cache!
and
ActiveRecord::Base.connection.clear_query_cache
without any luck.

So, it’s not the query cache. It looks like some sort of association
cache.
Anyone suggestions?

Op maandag 18 februari 2013 22:27:24 UTC+1 schreef javinto het volgende:

We are doing something similarly crazy as well, you might try:

ActiveSupport::Dependencies::Reference.clear!

I had to dig deep within the bowels of Active Support for that one :slight_smile:

Thanks! I might need that.

There was another caveat I ran into: Active Record subclasses. They do
not derive their table name dynamically from their parent class

Op 27 feb 2013, om 00:56 heeft Justin S. het volgende geschreven:

javinto wrote in post #1097693:

Unfortunately the Model.uncached block does not work.

I tried ActiveRecord::Base.connection.disable_query_cache!
and
ActiveRecord::Base.connection.clear_query_cache
without any luck.

So, it’s not the query cache. It looks like some sort of association
cache.
Anyone suggestions?

Op maandag 18 februari 2013 22:27:24 UTC+1 schreef javinto het volgende:

It seems I have the exact same problem. Have you found a solution?

Thanks for your help!

Unfortunately not. We redesigned the whole concept. Certainly not ideal,
but that was the only way around.

I did not try it out in Rails 4 though which might be worth a try.

Good luck!

Op 23 jul. 2013, om 17:51 heeft Arnaud M. [email protected] het
volgende geschreven:

Jan Verhoek wrote in post #1116383:

Unfortunately not. We redesigned the whole concept. Certainly not ideal,
but that was the only way around.

I did not try it out in Rails 4 though which might be worth a try.

Good luck!

Op 23 jul. 2013, om 17:51 heeft Arnaud M. [email protected] het
volgende geschreven:

Ok, thanks for your answer. I’ll try to work around, definitely need
some luck on this one!