"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.