How to clear ActiveRecord query cache on associations with dynamic table

504 views
Skip to first unread message

javinto

unread,
Feb 18, 2013, 4:27:24 PM2/18/13
to rubyonra...@googlegroups.com
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 Bedwell

unread,
Feb 18, 2013, 4:32:37 PM2/18/13
to rubyonra...@googlegroups.com
Model.uncached do
Model.do.work
end
> --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to rubyonrails-ta...@googlegroups.com.
> To post to this group, send email to rubyonra...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/rubyonrails-talk/-/esE-9LGzDZgJ.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>

javinto

unread,
Feb 18, 2013, 5:15:13 PM2/18/13
to rubyonra...@googlegroups.com
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.

unread,
Feb 26, 2013, 6:56:47 PM2/26/13
to rubyonra...@googlegroups.com
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 :)

--
Posted via http://www.ruby-forum.com/.

Jan Verhoek

unread,
Feb 27, 2013, 5:19:14 AM2/27/13
to rubyonra...@googlegroups.com
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
> --
> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
> To post to this group, send email to rubyonra...@googlegroups.com.

Arnaud M.

unread,
Jul 23, 2013, 11:51:43 AM7/23/13
to rubyonra...@googlegroups.com
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

unread,
Jul 23, 2013, 12:36:43 PM7/23/13
to rubyonra...@googlegroups.com
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!
> --
> You received this message because you are subscribed to a topic in the Google Groups "Ruby on Rails: Talk" group.
> To unsubscribe from this topic, visit https://groups.google.com/d/topic/rubyonrails-talk/SqcZ8wVNIY0/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to rubyonrails-ta...@googlegroups.com.
> To post to this group, send email to rubyonra...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/0c67962058dc57acff243abe7858e041%40ruby-forum.com.

Arnaud M.

unread,
Jul 23, 2013, 12:58:43 PM7/23/13
to rubyonra...@googlegroups.com
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. <li...@ruby-forum.com> het
> volgende geschreven:

Ok, thanks for your answer. I'll try to work around, definitely need
some luck on this one!
Reply all
Reply to author
Forward
0 new messages