Forum: Ruby on Rails Class Variable Scope

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.
Ben C. (Guest)
on 2005-12-29 08:54
(Hopefully) a quick question about variable scope issues.  In one of my
controllers, I have a class variable:

class TestController < ApplicationController
  @@testClassVariable = 0
...

The problem is, in my "list" method I'm trying to increment this
variable by one each time, printing it out, but it seems to reset to 0
every time the list method is called:

def list
  ...
  @@testClassVariable += 1
  logger.info @@testClassVariable #prints "1" each time
  ...
end

All the examples I've found online tell me this should work, printing
out incrementally higher numbers.  Do I have a problem with my scope
that I'm just not understanding?  Or are controller classes special
beasts?  Any clarification would be greatly appreciated!
James A. (Guest)
on 2005-12-29 10:16
(Received via mailing list)
If you're running in development mode, your classes are being reloaded
(effectively 'reset') for every request... you might instead want to
consider storing this information in the session hash, or even in the
database itself.

- james
Wilson B. (Guest)
on 2005-12-29 17:46
(Received via mailing list)
On 12/29/05, Ben CH <removed_email_address@domain.invalid> wrote:
>
> beasts?  Any clarification would be greatly appreciated!
>

One possible 'hack-around' would be to say:
@@testClassVariable ||= 0
instead of
@@testClassVariable = 0

..which means "Assign 0 to @@testClassVariable unless it already has a
value."

James's suggestion of the session or database is definitely more robust,
though.
Ben C. (Guest)
on 2005-12-29 21:04
Thank you for both your replies!  Jame's comment about running in
development mode is exactly right I think, and storing the variables in
the session sounds like a great solution.  Thanks again!
This topic is locked and can not be replied to.