DynagenでCCIEを目指す
database migration
最終更新:
it_certification
-
view
1. 履歴
- 2010/09/06 初稿
2. はじめに
- データベースの変更および世代管理を行う方法を記載します。
- 手順書簡略化のため、一部CLIによる手順のみを記します。GUI環境の方は適宜読み替えて下さい。
- rails 2.3.8 で動作確認を行った手順です。バージョンが違う場合は、適宜手順を読み替える必要があります。
3. 前準備
3.1. deptプロジェクトの作成
deptプロジェクトを作成します。
rails dept
3.2. productアプリケーションの作成
productのscaffoldを生成します。
ruby script/generate scaffold product \ title:string description:text image_url:string
3.3. database migration
database migrationを実施します。
rake db:migrate
4. 列の追加
4.1. migration 生成
productsテーブルにdecimal型price列を追加します。なお、maigration名は「to + テーブル名単数系」にする事で、テーブルに列を追加するrakeタスクを自動生成してくれます。また、慣例的に、テーブル作成ならば「create」で始まる名前に、列追加ならば「add」で始まる名前にします。
以下の通りのコマンドを入力して下さい。
以下の通りのコマンドを入力して下さい。
ruby script/generate migrate add_price_to_product price:decimal
GUIを使う場合は以下の通り入力します。マイグレーション名の命名規則は、スネークケース、アッパーキャメルケースのどちらでも構いません。
ジェネレータ:migration 生成 引数:AddPriceToProduct

4.2. rakeタスクの編集
上記migration生成によって、「YYYYMMDDhhmmss_add_price_to_priduct」というファイルが生成されます。このファイル内のrakeタスクを編集する事によって、列のデフォルト値や桁数などを定義する事ができます。編集例は以下の通りです。
- 変更前
class AddPriceToProduct < ActiveRecord::Migration def self.up add_column :products, :price, :decimal end def self.down remove_column :products, :price end end
- 変更後
class AddPriceToProduct < ActiveRecord::Migration def self.up add_column :products, :price, :decimal, :precision => 8, :scale => 2, :default => 0 end def self.down remove_column :products, :price end end
:precision, :default以外にどのような設定ができるかについては、以下をご確認下さい。
http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html
4.3. migrationの実行
以下のrakeタスクを実行します。
rake db:migration
実行結果から、price列が追加された事を確認します。
== AddPriceToProduct: migrating ============================================== -- add_column(:products, :price, :decimal, {:precision=>8, :scale=>2, :default=>0}) -> 0.0000s == AddPriceToProduct: migrated (0.0000s) =====================================
添付ファイル