Alex Gutteridge
5/7/2007 7:42:00 AM
On 7 May 2007, at 16:22, Nanyang Zhan wrote:
> arjun ghosh wrote:
>> Hi,
>> can anyone tell me - is it possible to pass a string name
>> equivalent of
>> a
>> model name(example:- have a model called food_dept and i am
>> passing the
>> string "food_dept" to a method) and then covert(or cast) it to its
>> original
>> model equivalent so that i can use its object in the called
>> method. and
>> why
>> i am i trying to this manner is because i want to avoid passing an
>> object
>> which will make it very heavy. i think there should be some better
>> elegant
>> manner of doing this. can any one help me with this?
>> ciao
>> -AG
>
> I know how to do it for RoR.
> If food_dept is a model(class) name,shouldn't it be FoodDept?
> if so, you can use this:
> "food_dept".camelize.constantize
>
> if you mean it's a method, use this:
> send("food_dept")
>
>>> class Foo
>>> def bar
>>> "test"
>>> end
>>> end
> => nil
>>> a="foo"
> => "foo"
>>> b="bar"
> => "bar"
>>> c = a.camelize.constantize.new
> => #<Foo:0xb76cfa80>
>>> c.send(b)
> => "test"
>
> but sadly, it seems this wouldn't work for ruby.
The 'const_get' method will return a constant given a symbol (use
to_sym to turn a String into a Symbol):
irb(main):001:0> class Foo
irb(main):002:1> def moon; 'gibbous'; end
irb(main):003:1> end
=> nil
irb(main):004:0> class Bar
irb(main):005:1> def moon; 'waning'; end
irb(main):006:1> end
=> nil
irb(main):007:0> Object.const_get(:Foo).new.moon
=> "gibbous"
irb(main):008:0> Object.const_get(:Bar).new.moon
=> "waning"
A specific comment for the original poster though: Ruby objects are
passed by reference so unless I misunderstand your question you
shouldn't worry about passing 'heavy' objects. Though without a code
example it is hard to know exactly what you want.
Alex Gutteridge
Bioinformatics Center
Kyoto University