Forum: Ruby on Rails class variables in a model are ok to cache relatively static records within the scope of a brower ca

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.
D5df9fcd7ef4c3c937435d7d6adeab2a?d=identicon&s=25 Greg Hauptmann (Guest)
on 2009-01-20 06:04
(Received via mailing list)
Hi,

Class variables in a model are ok to cache relatively static records
within
the scope of a brower call aren't they?  That is, the results get
"refreshed" effectively each browser call (i.e. per browser call, per
mongrel process).  Example of what I'm talking about is below.

  @@all_records = nil
  def self.all_records
    @@all_records ||= Automatch.find(:all)      # say only 10 records,
relatively static
  end


--
Greg
http://blog.gregnet.org/
Aafa8848c4b764f080b1b31a51eab73d?d=identicon&s=25 Phlip (Guest)
on 2009-01-20 06:25
(Received via mailing list)
Greg Hauptmann wrote:

> Class variables in a model are ok to cache relatively static records
> within the scope of a brower call aren't they?  That is, the results get
> "refreshed" effectively each browser call (i.e. per browser call, per
> mongrel process).  Example of what I'm talking about is below.
>
>   @@all_records = nil
>   def self.all_records
>     @@all_records ||= Automatch.find(:all)      # say only 10 records,
> relatively static
>   end

Technically yes, and esthetically no.

You are "coupling" the state of your model to its current location in
control
flow. If control flow changes, your coupling might break. If, for
example, you
added a new feature that required two model objects, extant at the same
time,
then their @@all_records might accidentally conflict. Decoupled code is
easier
to safely change - that's essentially the definition of "decoupled".

Take out @@all_records = nil entirely, then use @all_records =
Automatch.find(:all). If your controller and similar code is also
decoupled, it
won't create more instances of your model than it needs, and they will
be efficient.
D5df9fcd7ef4c3c937435d7d6adeab2a?d=identicon&s=25 Greg Hauptmann (Guest)
on 2009-01-20 06:42
(Received via mailing list)
thanks - that makes sense - interestly enough the code I had, whilst it
worked from the console, didn't behave the same way from an RSpec
test....anyway I'll follow your advice

On Tue, Jan 20, 2009 at 3:24 PM, Phlip <phlip2005@gmail.com> wrote:

> >     @@all_records ||= Automatch.find(:all)      # say only 10 records,
> time,
>
> >
>


--
Greg
http://blog.gregnet.org/
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2009-01-20 11:44
(Received via mailing list)
On 20 Jan 2009, at 05:03, Greg Hauptmann wrote:

>     @@all_records ||= Automatch.find(:all)      # say only 10
> records, relatively static
>   end

In development yes, since the class is reloaded. In production no
since the class isn't reloaded so @@all_record is only ever set once
(minus potential race conditions upon initialization)

Fred
This topic is locked and can not be replied to.