[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Re: passing by value of object of a model

Nanyang Zhan

5/7/2007 7:23:00 AM

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.



--
Posted via http://www.ruby-....

1 Answer

Alex Gutteridge

5/7/2007 7:42:00 AM

0

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