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

8a17df3426daca6df1afc91e102974a0?d=identicon&s=25 javinto (Guest)
on 2013-02-18 22: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
52f3528c40e9cf28ad0900886eecb128?d=identicon&s=25 Jordon Bedwell (Guest)
on 2013-02-18 22:34
(Received via mailing list)
Model.uncached do
  Model.do.work
end
8a17df3426daca6df1afc91e102974a0?d=identicon&s=25 javinto (Guest)
on 2013-02-18 23: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:
A27ea9bdeb657a47afc54313238e93d3?d=identicon&s=25 Justin S. (justin_s)
on 2013-02-27 00: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 :)
8a17df3426daca6df1afc91e102974a0?d=identicon&s=25 Jan Verhoek (Guest)
on 2013-02-27 11: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:
A604c6641781eeb6a167c69c4e86433f?d=identicon&s=25 Arnaud M. (arnaud_m)
on 2013-07-23 17: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!
8a17df3426daca6df1afc91e102974a0?d=identicon&s=25 Jan Verhoek (Guest)
on 2013-07-23 18: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. <lists@ruby-forum.com> het
volgende geschreven:
A604c6641781eeb6a167c69c4e86433f?d=identicon&s=25 Arnaud M. (arnaud_m)
on 2013-07-23 18: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. <lists@ruby-forum.com> het
> volgende geschreven:

Ok, thanks for your answer. I'll try to work around, definitely need
some luck on this one!
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.