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:
the command should read:
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:
The new migration simply used the following rename_column method in the migration file's self.up method:
In the self.down method, the change was reversed with:
I then ran
rake pulled in the new migration file, changed the column name and all was well!
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!
Comments
Post a Comment
Please leave your comments on this topic: