Home » Ruby » How to convert a string to a constant in Ruby?

How to convert a string to a constant in Ruby?

Posted by: admin November 30, 2017 Leave a comment

Questions:

How to convert the string "User" to User?

Answers:
Object.const_get("User")

No need to require ActiveSupport.

Questions:
Answers:

You can use the Module#const_get method. Example:

irb(main):001:0> ARGV
=> []
irb(main):002:0> Kernel.const_get "ARGV"
=> []

Questions:
Answers:

If you have ActiveSupport loaded (e.g. in Rails) you can use

"User".constantize

Questions:
Answers:

The recommended way is to use ActiveSupport’s constantize:

'User'.constantize

You can also use Kernel’s const_get, but in Ruby < 2.0, it does not support namespaced constants, so something like this:

Kernel.const_get('Foobar::User')

will fail in Ruby < 2.0. So if you want a generic solution, you’d be wise to use the ActiveSupport approach:

def my_constantize(class_name)
  unless /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/ =~ class_name
    raise NameError, "#{class_name.inspect} is not a valid constant name!"
  end

  Object.module_eval("::#{$1}", __FILE__, __LINE__)
end

Questions:
Answers:

Use ruby magic method: eval():

eval("User")  #=>  User