# Custom data types

**URL:** <https://www.ruby-forum.com/t/custom-data-types/148914>\
**Category:** Rails\
**Created:** [September 18, 2008, 10:27am UTC](https://www.ruby-forum.com/t/custom-data-types/148914 "2008-09-18T10:27:00Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![josegalvan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/2bfe46/32.png) [@josegalvan](https://www.ruby-forum.com/u/josegalvan)\
**Post date:** [September 18, 2008, 10:27am UTC](https://www.ruby-forum.com/t/custom-data-types/148914/1 "2008-09-18T10:27:00Z")

</div>

Hello,

I have this class in my Rails project :

class CreateModels \< ActiveRecord::Migration  
def self.up  
create\_table :models do |t|  
t.string :model, :default =\> “Model”, :limit =\> 10  
t.string :description, :default =\> “short Description”, :limit =\>  
20  
t.string :longdescription, :default =\> “long Description”, :limit  
=\> 40  
t.timestamps  
end  
end

def self.down  
drop\_table :models  
end  
end

Now, if I need the same fields in another table, I need to put again :

.  
.  
t.string :description, :default =\> “short Description”, :limit =\> 20  
t.string :longdescription, :default =\> “long Description”, :limit =\> 40  
.  
.

How can I create something like a “template” or “pattern” that includes  
for example “:default =\> “short Description”, :limit =\> 20”, then I only  
use this template to create the new table. Something like this :

.  
.  
t.Template2 :description, # ‘Template2’ includes “:default =\> “short  
Description”, :limit =\> 20”  
t.Template3 :longdescription, # ‘Template3’ includes “:default =\> “long  
Description”, :limit =\> 40”  
.  
.

Then I will use this new type to create new fields with the same  
characteristics in all the tables.

Thanks,

Jose.

---

<div class="post-metadata">

**Author:** ![josegalvan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/2bfe46/32.png) [@josegalvan](https://www.ruby-forum.com/u/josegalvan)\
**Post date:** [September 18, 2008, 10:32am UTC](https://www.ruby-forum.com/t/custom-data-types/148914/2 "2008-09-18T10:32:52Z")

</div>

On 18 Sep 2008, at 09:26, Jose G. wrote:

> “long Description”, :limit =\> 40"  
> .  
> .
> 
> Then I will use this new type to create new fields with the same  
> characteristics in all the tables.

Well you could certainly add methods to the TableDefinition class  
(which is the class of the objects yielded by the create\_table block)  
if you wanted to.

Fred

---

<div class="post-metadata">

**Author:** ![josegalvan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/2bfe46/32.png) [@josegalvan](https://www.ruby-forum.com/u/josegalvan)\
**Post date:** [September 18, 2008, 10:45am UTC](https://www.ruby-forum.com/t/custom-data-types/148914/3 "2008-09-18T10:45:11Z")

</div>

Thanks Fred,

If I have :

class CreateModels \< ActiveRecord::Migration  
def self.up  
create\_table :models do |t|  
t.Template1 :model,  
t.Template2 :description,  
t.Template3 :longdescription,

```
  t.timestamps
end

```

end

I need to create the method inside “CreateModels” ? or Inside “Models”.

And then how can I use this “Template” in another “Table definition”.

Thanks.

---

<div class="post-metadata">

**Author:** ![josegalvan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/2bfe46/32.png) [@josegalvan](https://www.ruby-forum.com/u/josegalvan)\
**Post date:** [September 18, 2008, 11:46am UTC](https://www.ruby-forum.com/t/custom-data-types/148914/4 "2008-09-18T11:46:11Z")

</div>

On 18 Sep 2008, at 09:44, Jose G. wrote:

> ```
> t.Template3 :longdescription,
> 
> t.timestamps
> 
> ```
> 
> end  
> end
> 
> I need to create the method inside “CreateModels” ? or Inside  
> “Models”.

Neither. I was suggesting extending the TableDefinition (defined in  
schema\_defintion.rb)

Fred

---

<div class="post-metadata">

**Author:** ![josegalvan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/2bfe46/32.png) [@josegalvan](https://www.ruby-forum.com/u/josegalvan)\
**Post date:** [September 18, 2008, 9:26pm UTC](https://www.ruby-forum.com/t/custom-data-types/148914/5 "2008-09-18T21:26:14Z")

</div>

On Sep 18, 7:29 pm, “Jose G.” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Thanks agai Fred,
> 
> If I change the file in rails directory :
> 
> > Neither. I was suggesting extending the TableDefinition  
> > (defined in  
> > schema\_defintion.rb)

I wouldn’t do that. This is ruby - you can reopen a class whenever you  
feel like it, eg stick it in a file in lib and require that or (if  
you’re going to reuse it across apps) make it into a plugin.

Fred

---

<div class="post-metadata">

**Author:** ![josegalvan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/2bfe46/32.png) [@josegalvan](https://www.ruby-forum.com/u/josegalvan)\
**Post date:** [September 18, 2008, 9:15pm UTC](https://www.ruby-forum.com/t/custom-data-types/148914/6 "2008-09-18T21:15:35Z")

</div>

Thanks agai Fred,

If I change the file in rails directory :

> Neither. I was suggesting extending the TableDefinition  
> (defined in  
> schema\_defintion.rb)

Then If I upgrade to another rails version I need to modify the file  
again ?

Exists another way to put it inside the rails application independent  
from rails upgrade ?

Thanks,

Jose.

---

<div class="post-metadata">

**Author:** ![josegalvan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/2bfe46/32.png) [@josegalvan](https://www.ruby-forum.com/u/josegalvan)\
**Post date:** [September 18, 2008, 11:52pm UTC](https://www.ruby-forum.com/t/custom-data-types/148914/7 "2008-09-18T23:52:22Z")

</div>

Thanks Fred,

I will try with two of them.

About Plugins i found :

[http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i](http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i)  
[http://nubyonrails.com/articles/2006/05/09/the-complete-guide-to-rails-plugins-part-ii](http://nubyonrails.com/articles/2006/05/09/the-complete-guide-to-rails-plugins-part-ii)

But, about libraries inside rails …, do you know some places that i  
could read ?

Thanks

Jose.
