Forum: Ruby on Rails Rails 2 caching?

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.
0f50b9a2ad85666d537d39bda49327ee?d=identicon&s=25 Jonathan Rochkind (jrochkind)
on 2008-12-05 22:37
There's a part of my code that really needs to get the latest value from
the database.

But AR in Rails 2 seems to have some kind of caching, so if I execute a
Model.find statement with the exact same arguments, it won't go to the
database, it'll just return the same value it got last time?

At least that's the only way I can explain the weird behavior I am
seeing. This seems like rather an evil thing to turn on by default, but
at any rate, if I'm right about what's going on... how do I disable this
for an individual Model.find command, where I really need to get fresh
data?

Jonathan
8217faf2bfdfa7daf10135d41ddd421e?d=identicon&s=25 Jeff Cohen (jeff)
on 2008-12-05 23:19
(Received via mailing list)
On Dec 5, 3:37 pm, Jonathan Rochkind <rails-mailing-l...@andreas-
s.net> wrote:
> There's a part of my code that really needs to get the latest value from
> the database.
>
> But AR in Rails 2 seems to have some kind of caching, so if I execute a
> Model.find statement with the exact same arguments, it won't go to the
> database, it'll just return the same value it got last time?

Actually, that's only true during a single action (request-response
cycle). Once your action is over, the cache is cleared.


> At least that's the only way I can explain the weird behavior I am
> seeing. This seems like rather an evil thing to turn on by default, but
> at any rate, if I'm right about what's going on... how do I disable this
> for an individual Model.find command, where I really need to get fresh
> data?

You should always be getting new data.  If you need to get fresh data
within an action,
you can reload the model.

@order.reload

or

@order.products(true)  # reloads associated products collection

> Jonathan
> --
> Posted viahttp://www.ruby-forum.com/.

Hope that helps?

Jeff

www.purpleworkshops.com
0f50b9a2ad85666d537d39bda49327ee?d=identicon&s=25 Jonathan Rochkind (jrochkind)
on 2008-12-08 16:27
That does help, thanks. Sometimes I need fresh data within an action
even. Or for my tests--should the sql querries be cached during tests?
Is the semantics for what is cached when documented anywhere?

I also discovered "ModelName.uncached do", which is helpful. But
@individual_model.reload is good too, along with
@individual_model.reset--although I'm not sure #reset will actually
prevent re-use of the sql cache upon reload.

Some documentation of all this stuff would be really helpful, if anyone
who understands it for sure wants to write some.

Jeff Cohen wrote:
>
> Actually, that's only true during a single action (request-response
> cycle). Once your action is over, the cache is cleared.
>
> You should always be getting new data.  If you need to get fresh data
> within an action,
> you can reload the model.
>
> @order.reload
>
> or
>
> @order.products(true)  # reloads associated products collection
This topic is locked and can not be replied to.