« 編集部ブログはgoogle-code-prettifyを使っております | メイン | kizasiパーツが旬すぎる件 »

Ruby on Rails データベースmigration入門2

iioka@今回はバージョンを上げたり下げたりします
です。

「連載Ruby on Railsを始めよう」の第7弾です。
ブログにまとめることでRubyのことをしっかり覚えられています。
記事を掲載できて一番喜んでいるのは、当の本人かもしれません。

■これまでのお話
Aptana Eclipseプラグインで始めるRuby on Rails
RubyでHello World!
Ruby on RailsでHello World!
Ruby on Railsの文字コード指定場所
Ruby on Rails データベースmigration入門1
Ruby on RailsでDBが文字化けしてしまう→database.ymlに設定で解決
・(番外)NetBeans 6.0M10を使って3分で作るRuby on Railsアプリ


「Ruby on Rails データベースmigration入門1 」で、テーブルを作成しましたが、
今回は
・テーブルに変更を加える
・変更を元に戻す
をやってみます。
環境は「Ruby on Rails データベースmigration入門1 」を使います。


1.新規migrationファイルを作成
まずはbookamarksテーブルに新しいカラムを追加してみます。
そのためには新しいバージョンのmigrationファイルを作成します。
今回はmigrationファイル単体をジェネレートします。

ジェネレータタブから「migration」を選び、ファイル名を入力して実行します。
ファイル名は何でもいいのですが、
ここではカラムを追加するので、「add_bookmarks_column」にしました。

2007071001.gif


2.新規migrationファイルが作成される
すると新規migrationファイル「002_add_bookmarks_column.rb」が作成されます。
頭についている「002」はバージョン番号で、自動的に付加されます。

2007071002.gif


3.テーブル編集内容を実装
それでは「002_add_bookmarks_column.rb」にテーブル編集内容を実装します。
今回は
・登録日時
・更新日時
の2つのカラムを追加したいと思います。
railsの場合、「登録日時」「更新日時」はそれぞれ
「created_at」「updated_at」と名前が決まってます。(※別の名前でもいいですが、こちらの方が何かと便利です)

self.upメソッドには次のように記述します。

def self.up
  add_column :bookmarks, :created_at, :timestamp
  add_column :bookmarks, :updated_at, :timestamp
end

バージョンダウン時の操作を行うself.downメソッドには、
追加したカラムを削除する操作を記述しておきます。

def self.down
  remove_column :bookmarks, :created_at
  remove_column :bookmarks, :updated_at
end

2007071003.gif

以上で完了です。


4.最新バージョンにテーブルを更新
では、今実装した最新バージョンにテーブルを更新してみます。
rakeビューを開き「db:migrate」を選択、右のエリアには何も入れずに実行します。
このコマンドでrailsは最新バージョンのテーブル構成を作成します。

実行が済んだらテーブルを確認してみてください。
「created_at」「updated_at」カラムが追加されているはずです。


5.やっぱり前のバージョンに戻したい
ところがせっかく追加したカラムですが、
残念ながら不要となり前のバージョンに戻すことになりました。

railsなら以前のバージョンに戻すのも簡単です。
前のバージョン(バージョン1)に戻すには、
rakeビューを開き、「db:migrate」を選択、
右側のエリアに「VERSION=1」を入力して実行します。

このとき=の前後に半角スペースを空けないようにしてください。
「VERSION」は小文字でも大丈夫です。

2007071004.gif

実行が済んだらテーブルを確認してみます。
きれいさっぱり追加カラムが消えているはずです。


バージョンNo.を知るには
現在のmigrationバージョンは、
DBの「schema_info」テーブルに登録されています。
このテーブルは初回migrate実行時に自動的に作成され、
railsはこのテーブルを見ながらバージョン管理をするようになっています。


いよいよ次回はRailsの真骨頂(?)、scaffoldを書きたいと思います。

スポンサーサイト