Class Variable Scope


#1

(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!


#2

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

#3

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!


#4

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.