Custom data types

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.

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

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.

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

On Sep 18, 7:29 pm, “Jose G.” [email protected] 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

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.

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/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.