Forum: Ruby on Rails How to clear ActiveRecord query cache on associations with dynamic table

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
javinto (Guest)
on 2013-02-18 23:29
(Received via mailing list)
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
Jordon B. (Guest)
on 2013-02-18 23:34
(Received via mailing list)
Model.uncached do
  Model.do.work
end
javinto (Guest)
on 2013-02-19 00:16
(Received via mailing list)
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:
Justin S. (Guest)
on 2013-02-27 01:56
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 :)
Jan Verhoek (Guest)
on 2013-02-27 12:20
(Received via mailing list)
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:
Arnaud M. (Guest)
on 2013-07-23 19:51
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!
Jan Verhoek (Guest)
on 2013-07-23 20:37
(Received via mailing list)
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. <removed_email_address@domain.invalid> 
het
volgende geschreven:
Arnaud M. (Guest)
on 2013-07-23 20:58
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. <removed_email_address@domain.invalid> het
> volgende geschreven:

Ok, thanks for your answer. I'll try to work around, definitely need
some luck on this one!
This topic is locked and can not be replied to.