# Creating and naming variables dynamic

**URL:** <https://www.ruby-forum.com/t/creating-and-naming-variables-dynamic/136063>\
**Category:** Ruby\
**Created:** [April 28, 2008, 5:06pm UTC](https://www.ruby-forum.com/t/creating-and-naming-variables-dynamic/136063 "2008-04-28T17:06:22Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tarscher](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/8491ac/32.png) [@Tarscher](https://www.ruby-forum.com/u/Tarscher)\
**Post date:** [April 28, 2008, 5:06pm UTC](https://www.ruby-forum.com/t/creating-and-naming-variables-dynamic/136063/1 "2008-04-28T17:06:22Z")

</div>

Hi all,

I want to create a variable dynamic. I have defined some classes and  
depending on data I get from a database I need to construct an object  
eg:

now I do

if type==“car”  
variab = Car.new  
elsif type=“boat”  
variab = Boat.new  
end

can I do something like  
variab = Instance.new(type)

Following this: can I give dynamic variablenames?  
now I do  
if type==“car”  
car\_string = Car.new  
elsif type=“boat”  
boat\_string = Boat.new  
end

can I do something like  
dynamicpart\_string = Instance.new(type)

Regards,  
Stijn

---

<div class="post-metadata">

**Author:** ![Tarscher](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/8491ac/32.png) [@Tarscher](https://www.ruby-forum.com/u/Tarscher)\
**Post date:** [April 28, 2008, 5:47pm UTC](https://www.ruby-forum.com/t/creating-and-naming-variables-dynamic/136063/2 "2008-04-28T17:47:58Z")

</div>

Hi –

On Tue, 29 Apr 2008, Tarscher wrote:

> elsif type=“boat”  
> car\_string = Car.new  
> elsif type=“boat”  
> boat\_string = Boat.new  
> end
> 
> can I do something like  
> dynamicpart\_string = Instance.new(type)

Fred Cheung has answered this post for you on the Rails mailing list.

David

---

<div class="post-metadata">

**Author:** ![Tarscher](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/8491ac/32.png) [@Tarscher](https://www.ruby-forum.com/u/Tarscher)\
**Post date:** [April 28, 2008, 6:51pm UTC](https://www.ruby-forum.com/t/creating-and-naming-variables-dynamic/136063/3 "2008-04-28T18:51:42Z")

</div>

if type can be either ‘car’ or ‘boat’ i.e. lowercase strings:

my\_class = Object.const\_get(type.capitalize)

and then

my\_class.new

etc.

alternatively, you can look into active\_support, where you have stuff  
like

> > “string”.classify.constantize.new(“aa”)  
> > =\> “aa”

HTH,  
Peter

* * *

[http://www.rubyrailways.com](http://www.rubyrailways.com)  
[http://scrubyt.org](http://scrubyt.org)

---

<div class="post-metadata">

**Author:** ![Tarscher](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/8491ac/32.png) [@Tarscher](https://www.ruby-forum.com/u/Tarscher)\
**Post date:** [April 28, 2008, 7:04pm UTC](https://www.ruby-forum.com/t/creating-and-naming-variables-dynamic/136063/4 "2008-04-28T19:04:02Z")

</div>

On 28.04.2008 17:03, Tarscher wrote:

> elsif type=“boat”  
> variab = Boat.new  
> end
> 
> can I do something like  
> variab = Instance.new(type)

More options

factory = {  
“car” =\> Car,  
“boat” =\> Boat,  
}

var = factory[type].new

> Following this: can I give dynamic variablenames?  
> now I do  
> if type==“car”  
> car\_string = Car.new  
> elsif type=“boat”  
> boat\_string = Boat.new  
> end
> 
> can I do something like  
> dynamicpart\_string = Instance.new(type)

Better use a Hash for this

vars = {}  
vars[type] = factory[type].new

Cheers

robert

---

<div class="post-metadata">

**Author:** ![Tarscher](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/8491ac/32.png) [@Tarscher](https://www.ruby-forum.com/u/Tarscher)\
**Post date:** [April 29, 2008, 4:24am UTC](https://www.ruby-forum.com/t/creating-and-naming-variables-dynamic/136063/5 "2008-04-29T04:24:38Z")

</div>

You can try methods instead of dynamic variables, but the best option is  
the  
one above with hash.

self.class.send(:define\_method,  
type){Object.const\_get(type.capitalize);}
