(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! -- Posted via http://www.ruby-forum.com/.
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 On 12/29/05, Ben CH <eviloverlord-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> (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! > > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > Rails mailing list > Rails-1W37MKcQCpIf0INCOvqR/iCwEArCW2h5@public.gmane.org > http://lists.rubyonrails.org/mailman/listinfo/rails >
On 12/29/05, Ben CH <eviloverlord-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> (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! >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.