Mac、WindowsでRuby On Railsをインストール、サービス構築するまでの詳細情報を紹介します。
更新:11/10/05 | Ruby On Rails Migration DB管理編 | Ruby On Rails
テーブルの作成
DBのテーブルは、migrationというコマンドと考え方で整理して簡単に管理することができます。
その名の通り、次々に変化していくであろうDBのテーブルスキーマをマイグレーション(進化?)させていくプロセスを、Railsがシステムとしてサポートしてくれているイメージです。
作成するテーブルは3つあるので、それぞれ次のようにモデルのクラス名を命名しました。
User
Skill
Connection
それぞれのクラスのひな形を作成します。
Generators他部を選択します。この他部はその名の通り「Gnerates=ひな形を作り出す」機能を持っています。
左手のリストから「model」を選択します。modelをのひな形を作り出すことになります。
モデルのひな形を作ると、同時にmigrationのひな形も作成されます。
クラス名を右手の引数に入力します。
最後にGoボタンをクリックすると、自動的にひな形が作成されます。
skillmapper\app\models\users.rb
としてモデルクラスが作成されます。
加えて、
skillmapper\db\migrate\001_create_users.rb
としてcreateと付け加えられたマイグレーションクラスが作成されます。
しかし、どちらも中を開くと空っぽです。
マイグレーションクラス
class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users do |t|
end
end
def self.down
drop_table :users
end
end
自動的に生成してくれると言っても、この段階ではこの程度です。
直感的に想像できるとおり、self.upはマイグレーション時に実行されるパートで、self.downはデグレーションつまり巻き戻しをした場合に実行されるコードになります。
マイグレーションクラスには、どんなスキーマになるかは具体的に入力する必要があります。
DBに関する操作には次のような関数が用意されています。
create_table(name, options)
テーブルを作成する。:force => true で既存のテーブルを上書きする。
drop_table(name)
テーブルを削除する。
add_column(table_name, column_name, type, options)
カラムを追加する。
remove_column(table_name, column_name)
カラムを削除する。
rename_column(table_name, column_name, new_column_name)
カラム名を変更する。
change_column(table_name, column_name, type, options)
カラムの型を変更する。
add_index(table_name, column_name, index_type)
インデックスを追加する。
remove_index(table_name, column_name)
インデックスを削除する。
execute(sql)
SQL文を実行する。
Base#reset_column_information
即座にカラムの情報を更新する。
既に、自動的にcreate_tableというテーブルを作成する関数が挿入されています。
ただ、テーブルが作成されてもカラムがないと意味がありませんので、追加していきます。
create_table :users do |t|
の最後に指定されている
do |t|
end
という記述は、作成されたテーブルオブジェクトをtとしてendと挟まれた間で指定できるお膳立てをしています。
VBでいうwithに近いものでしょうか……。
t.column :id, :integer, :null => false
と指定すると、今作成したてのテーブルtの絡むとして、idという名前でinteger(整数値型)のカラムを作成しNot Null制約を持たせることを意味します。
抽象表現 Ruby型 PostgreSQL型 MySQL型
:primary_key Fixnum serial primary key int(11) DEFAULT NULL auto_increment PRIMARY KEY
:string String character varying(255) varchar(255)
:text String text text
:integer Fixnum integer int(11)
:float Float float float
:datetime Time timestamp datetime
:timestamp Time timestamp datetime
:time Time timestamp datetime
:date Date date date
:binary String bytea blob
:boolean Object boolean tinyint(1)
http://tech.feedforce.jp/railsmigration.html
だそうです。この辺りは、今後増えたり修正されるかもしれません。
:limit 数値で桁数指定
:default デフォルト値を指定
:null true or false
といったオプションもカンマで区切って指定できます。
CreateUsersクラスは結果的に以下のようにしました。
def self.up
create_table :users do |t|
t.column :first_name, :string, :null => false
t.column :last_name, :string, :null => false
end
end
ここで重要なのは、ユーザーを一位に決定するプライマリキーidは、Railsの中で特殊な存在として扱われている点です。
そのため、CreateUsersクラスにidというカラムの作成を指定しなくても自動的にidという絡むが作成されます。
Ctrl+Sでファイルを保存したら、実際にマイグレーションをかけてみます。
今度は、Eclipseの下段にあるタブからRake Tasksを選択します。
左側のリストからdb:migrateを選択しGoボタンをクリックします。
自動的にDBテーブルが作成されます。
成功時のログは以下の通りです。
(in /Users/minoru/Documents/RoR/skillmapper)
== CreateUsers: migrating =====================================================
-- create_table(:users)
-> 0.0515s
== CreateUsers: migrated (0.0527s) ============================================
== CreateSkills: migrating ====================================================
-- create_table(:skills)
-> 0.0064s
== CreateSkills: migrated (0.0080s) ===========================================
== CreateConnections: migrating ===============================================
-- create_table(:connections)
-> 0.0058s
== CreateConnections: migrated (0.0065s) ======================================
エラーが表示された場合は、内容を確認指定可のような状態に陥っていないか見直します。
MySQLが起動していない。
DBが作成されていない。
CreateSkillsクラス
skillmapper\db\migrate\002_create_skills.rb
に以下のようにコードを追加します。
class CreateSkills < ActiveRecord::Migration
def self.up
create_table :skills do |t|
t.column :name, :string
end
end
def self.down
drop_table :skills
end
end
CreateConnectionsクラス
skillmapper\db\migrate\003_create_connections.rb
に以下のようにコードを追加します。
class CreateConnections < ActiveRecord::Migration
def self.up
create_table :connections do |t|
t.column :skill_id, :integer
t.column :user_id, :integer
t.column :value, :integer
t.column :time, :timestamp
end
end
def self.down
drop_table :connections
end
end
- お勧めリンク
- ダウンロード
- ストリーミング関連
- Macintosh関連
-
- Macでも使えるDVDドライブ
- Leopard詳解
- iLife詳解
- Macの修復方法特集
- Apple MacBook (Pro)
- Macで無線LAN802.11n
- 新旧MacBookベンチマーク
- フルHD編集Apple iMovie&Final Cut Express
- ROXIO Toast Platinum
- フルHD編集Apple Final Cut X
- MacBookのHDD換装方法
- MacとWindowsのファイル共有
- MacでWindowsを遠隔操作
- WinユーザーのためのMac概論
- 無料の辞書検索ツール 英辞郎
- 代表的なタブブラウザの比較
- Macお勧めのフリーソフト紹介
- 無料のOffice環境 NeoOffice
- エミュレータ比較
- Macで最適バックアップ
- iGeek Indelible
- intego PersonalBackup
- EMC® Retrospect® for Mac
- Mac版 ウイルス対策
- Ruby On Rails インストール(Mac編)
- Ruby On Rails 開発の初歩(Model)
- Ruby On Rails 開発環境RadRails
- Ruby On Rails DBメンテナンス
- Excel, Wordを使ってMacで年賀状宛名印刷
- Windows関連
-
- EaseUS Todo Backupで完璧バックアップ
- DVD, Blu-rayリッピングツール AnyDVD HD
- キャプチャーソフト hunuaaCap
- Windows2003でリモートデスクトップ7を動かす
- 最適なバックアップソフトは
- robocopyによるバックアップ
- リージョンフリー
- リージョンフリー化を有効活用
- マルチブート
- Antivir®
- eTrust Antivirus
- AVG AntiVirus
- C#徹底講座
- メーラー Mailer
- VBA徹底活用術
- JustSystemメーラーShuriken
- FTPソフトとコマンドライン解説
- DOS/Vパーツリンク集
- Oracle10gBronze試験対策
- CDからMP3へ簡単に変換する方法
- メディアなど
- ハードウェア
-
- iPhone 3G
- iPhone 4
- iPod+iTunes
- iPhone SDK
- 色域(AdobeRGB)
- hp mini 1000
- 環境紹介
- KDDI au新旧プラン研究
- DVDをMP4にコンバート
- 無線LAN環境802.11n
- キャプチャボード
- HD-LANによるネットワークストレージ構築
- NEC LavieJ LJ500/5A
- LavieJ HDD換装
- LavieJ 調子の悪いHDDの復旧
- LavieJ 無線LANモジュールの換装
- LavieJ メモリの追加
- LavieJ バックアップ作成と復元
- Intel PRO/Wireless 2200BG
- 液晶・プラズマテレビ比較
- プリンタ(hp PSC2550)
- 万能リモコン クロッサム
- 婦人体温計 プチソフィア
- 婦人体温計 マドンナ
- ソフトウェア/サービス/開発SDK
- デジタル一眼レフカメラ
- テクニカル記事
- 趣味関連
- ゲーム 〜楽しいゲームの紹介や攻略法
- RoverMNI(ローバーミニ)
- 雑記
- その他
-
- ネットバンキングに便利な金融機関
- 便利なサイト翻訳機能
- 便利ツール GMail
- 無料電話Gizmoの嘘とほんと
- リンク:一般ページへのリンク集
- 相互リンク:相互リンク募集中!
- 本ページの統計:本サイトの統計データ公開
- コメント・フィードバック