Monday, January 14, 2008

Experiences Using "Build Your Own Ruby On Rails Web Applications"

This is the first of a series of tech posts on this blog. I'm studying RubyOnRails, (RoR), using an excellent book: Build Your Own Ruby On Rails Web Applications . The book is easy to understand and flows well in a narrative fashion with plenty of humor thrown in. As I build my real-world application I'll post notes of interest here. These posts are intended for RubyOnRails beginners or others reading the book.

Model class to database table naming:
I understood from the book that a model class like 'Story' would be translated into a table name in a migration file of 'story'. What I was not aware of was that a name like 'MyBigStory' will be translated into a table name of 'my_big_story'.

rake and rolling back database migrations:
First, this feature of RoR is incredible! Essentially it's revision control for database schemas! With a minimum of work, the developer can maintain a framework that allows her to easily move back and forth between versions of the schema. The generated migration files go a long ways towards making this feature convenient to use.

There is a typo in the book around rolling back versions. The command in the book is:

rake db:migrate -VERSION=n

the command should read:

rake db:migrate VERSION=n

Most importantly, this typo led me to re-read the beginning of the book where it is noted that all errata will be published at the books online errata page.

Of course, the question arises, why did I need to do a rollback of a schema so soon? I typed in an incorrect column name for a table column. So, on page 187 of the book where the author adds a story_id column, I added a stary_id column. Because of the errata, I was unable to roll back the migration. It didn't seem right to roll back the migration and lose the development history anyway. So, I moved forward and created a new migration to correct the misnaming.

First, ruby was used to create a new migration file:

rruby script/generate migration RenameID

The new migration simply used the following rename_column method in the migration file's self.up method:

rename_column :votes, :stary_id, :story_id

In the self.down method, the change was reversed with:

rename_column :votes, :story_id, :stary_id

I then ran

rake db:migrate

rake pulled in the new migration file, changed the column name and all was well!

1 comment:

CresceNet said...

Hello. This post is likeable, and your blog is very interesting, congratulations :-). I will add in my blogroll =). If possible gives a last there on my site, it is about the CresceNet, I hope you enjoy. The address is . A hug.