$ ./script/generate model クラス名(名称単数形)
で、app/models/クラス名.rb の他に マイグレーションファイル(テーブルの作成や進化を記述するファイル)db/migrate/001_create_名称複数形.rb が作成される。これがcreate table文の元になる。ファイルを開き、self.up内で create_tableメソッドに渡すコードブロック(パラメータt)にカラム数分の t.columnを書く。
t.column :名前, :型, {オプションs}
型は :string, :text, :integer, :float, :decimal, :datetime, :timestamp, :time, :date, :binary, :boolean あたりが使える。
オプションは :limit=>カラム長, :default=>デフォルト値, :null=>null許容か否か, :precision=>数値の精度, :scale=>数値のスケール
(明示的に書かなければ)idというカラムがオートナンバーで勝手に付き、これが主キーになる。
書き終わったら
$ rake db:migrate
とすると、development環境のデータベースにテーブルが作成される。このテーブルを削除するには rake db:migrate VERSION=0 とすれば良い。
テーブルを変更する時、中身をドロップしたくない場合は ./script/generate migration modify_名称複数形 のように migrationを generateしてやると、バージョン番号のインクリメントされたマイグレーションファイルが作成されるので、self.upには create_tableの代わりに add_columnなどといったアップグレード差分を記述し、self.downには drop_tableのかわりに remove_columnなどのダウングレード差分を記述する。
マイグレーションファイルで使える主な記述は下記のとおり。
create_table :テーブル名, {オプション}
drop_table :テーブル名
rename_table :旧テーブル名, :新テーブル名
add_column :テーブル名, :カラム名, :型, {オプション}
remove_column :テーブル名, :カラム名
rename_column :テーブル名, :旧カラム名, :新カラム名
change_column :テーブル名, :カラム名, :型, {オプション}
add_index :テーブル名, :カラム名, {オプション}
remove_index :テーブル名, :カラム名
add_columnのオプションは :null=>false など
add_indexのオプションは :unique=>true など
Bookクラスを例に取ってActiveRecordで可能なオペレーションのいくつかをメモ。
・条件に該当する最初のレコード(Bookオブジェクト)を得る
Book.find(:first, :conditions=>["title=?", "ツァラトゥストラはこう言った"])
・レコードを作成する
Book.create(:title=>"FlexとRails") # id列には勝手に連番がつく
・条件に該当する全てのレコード(BookオブジェクトのArray)を指定のオーダーで得る
Book.find(:all, :conditions=>['price < 1000'], :order=>"issue_date DESC")
本番環境にテーブルを作成するには RAILS_ENV=productionを指定して db:migrateを呼び出す。
$ rake db:migrate RAILS_ENV=production
ラベル: Rails