Convert string to class name without using eval in ruby?

16,578

Solution 1

You can try

class Post
end

Object.const_get("Post")

Which returns the Post class

Solution 2

Use Module.const_get

string = "Fixnum"
clazz = Object.const_get(string)
clazz.name # => "Fixnum"

If you are in a rails context, you can also use the `#constantize method on string

clazz = string.constantize # => Fixnum
Share:
16,578
Stratus3D
Author by

Stratus3D

Erlang, Elixir, Ruby, Lua and JavaScript developer. Website Github Profile

Updated on June 09, 2022

Comments

  • Stratus3D
    Stratus3D almost 2 years

    I have something like this:

    string = "Post"
    

    I would like to convert the string to a class name literal. I use eval like this to convert the string:

    eval(string) #=> Post
    

    Being a javaScript developer I try to avoid eval. Is there a better way of doing this in Ruby? Or is using eval the preferred way of handling this?

  • vajapravin
    vajapravin over 9 years
    constantize is best than others