ruby-talk
5/6/2007 5:26:00 PM
"Logan Capaldo" <logancapaldo@gmail.com> wrote:
>
> You guess is in the territory, but it's not really about session's
> capability. if xyz_method is a controller action for instance, and
> abc_method is a controller action, there's nothing guaranteeing per se
> that you're state is going to be persisted between user interactions
> with the web app. What you really need to store in session is the name
> of the constant, AND it's value. and then you need to const_set it at
> the beginning of every method where you make use of this live tree
> thing.
>
Hi,
Creating a new constant from session data still doesn't work.
As you said I now store both constant_name and constant_value in session.
However, when trying to test the new Constant (const_defined?),
I get a NameError (see below).
Also, when printing it, its value is printed, not its name:
"{@new_constant}" --> "/path/to/nirvana".
How do I access its name?
Maybe you find an error in code.
Or maybe you know of another way
to create dynamically named variables..?
class AbcController < ApplicationController
before_filter :get_constants, :except => :define_constants
def define_constants
@user = "tom"
constant_name = "#{@user.upcase}_PATH"
logger.info("#{constant_name}")
# output: TOM_PATH
constant_value = self::class::const_set(constant_name, "/path/to/nirvana")
logger.info("#{constant_value}")
# output: /path/to/nirvana
session[:constant_name] = constant_name
session[:constant_value] = constant_value
end
def get_constants
if session[:constant_name]
@constant_name = session[:constant_name]
logger.info("#{@constant_name}")
# output: TOM_PATH
if session[:constant_value]
@constant_value = session[:constant_value]
logger.info("#{@constant_value}")
# output: /path/to/nirvana
@new_constant = self::class::const_set(@constant_name, @constant_value)
logger.info("#{@new_constant}")
# output: /path/to/nirvana
evaluate_constant = self::class::const_defined?(@new_constant)
# output: NameError (wrong constant name /path/to/nirvana)
end
end
end
end
Thanks for your input,
Tom.