Hi all,
I know this can be done, but I can’t find out how to do it. I have a
string with the name of the class that I want to initialize, but how do
I do it?
This is what I tried,
class = “Product”
product = class.new
Obviously this does not work or I wouldn’t be asking So, how do I do
this?
Actually, Jim answered this question twice, once directly and once in
a post to our local users group with nearly identical code, but
clearly typed in ad hoc both times.
If you need to deal with something like ActiveRecord::Base, the
simple form doesn’t work:
Object.const_get “ActiveRecord::Base”
NameError: wrong constant name ActiveRecord::Base
from (irb):1:in `const_get’
from (irb):1
“ActiveRecord::Base”.split(‘::’).inject(Object) {|scope,name|
scope.const_get(name)}
=> ActiveRecord::Base
Obviously this does not work or I wouldn’t be asking So, how do I do
this?
Peer
I suggest you use this method (out of Rails):
def constantize(camel_cased_word)
unless /^(::)?([A-Z]\w*)(::[A-Z]\w*)*$/ =~ camel_cased_word
raise NameError, “#{camel_cased_word.inspect} is not a valid
constant name!”
end
camel_cased_word = “::#{camel_cased_word}” unless $1
Object.module_eval(camel_cased_word, FILE, LINE)
end
It’s a bit more powerful than the built-in Ruby Version.
Hi all,
I know this can be done, but I can’t find out how to do it. I have a
string with the name of the class that I want to initialize, but how do
I do it?
This is what I tried,
class = “Product”
product = class.new
Obviously this does not work or I wouldn’t be asking So, how do I do
this?