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?
On Friday, June 15, 2007, at 04:36PM, "Peer Allan" <peer@canadadrugs.com> wrote:
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?
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?
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?
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?
The word class is a reserved word so yu should use something different...
Cheers,
Enrique
# from Jim Weirich (based on email correspondence)
def constantize(camel_cased_word)
camel_cased_word.
sub(/^::/,'').
split("::").
inject(Object) { |scope, name| scope.const_get(name) }
end
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