バリケンのRuby日記 RSSフィード

2007-04-19

[][] 「嫌なこと書き貯めWebアプリ」を作ろう(2)  「嫌なこと書き貯めWebアプリ」を作ろう(2) - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  「嫌なこと書き貯めWebアプリ」を作ろう(2) - バリケンのRuby日記  「嫌なこと書き貯めWebアプリ」を作ろう(2) - バリケンのRuby日記 のブックマークコメント

このあいだの続きだよ。

テーブルの作成

前回railsコマンドで「モデルの雛形」と一緒に「データベーススキーマの雛形」ができているから、まずはそれにモデル属性を定義してテーブルを作成するよ。

具体的には、テキストエディタでC:\rails\magica\db\migrateディレクトリ以下にある「001_create_users.rb」「002_create_cards.rb」「003_create_card_details.rb」「004_create_entries.rb」を次のように編集するよ。

まずは「001_create_users.rb」だよ。編集前は

class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
    end
  end

  def self.down
    drop_table :users
  end
end

のような雛形になっているから、追加したい属性を追加していくよ。ここではとりあえず「名前(name)」という属性を追加してみたよ。

class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.column :name, :string, :null => false
    end
  end

  def self.down
    drop_table :users
  end
end

次に「002_create_cards.rb」だよ。「カードの詳細」を参照する属性(card_detail_id)、「原因(cause)」、「内容(content)」という属性を追加してみたよ。「:null => false」と指定した属性は、「入力必須」を表すよ。このあたりの詳細はまたこんど。

class CreateCards < ActiveRecord::Migration
  def self.up
    create_table :cards do |t|
      t.column :card_detail_id, :integer, :null => false
      t.column :cause, :text
      t.column :content, :text
    end
  end

  def self.down
    drop_table :cards
  end
end

その次に「003_create_card_details.rb」だよ。これも「名前(name)」という属性を追加してみたよ。

class CreateCardDetails < ActiveRecord::Migration
  def self.up
    create_table :card_details do |t|
      t.column :name, :string, :null => false
    end
  end

  def self.down
    drop_table :card_details
  end
end

さいごに「004_create_entries.rb」だよ。ここでは「このエントリがいつ作られたか」を保存する属性(created_on)、ユーザーid(user_id)、エントリid(entries_id)という属性を追加してみたよ。

class CreateEntries < ActiveRecord::Migration
  def self.up
    create_table :entries do |t|
      t.column :created_on, :date
      t.column :user_id, :integer
      t.column :card_id, :integer
    end
  end

  def self.down
    drop_table :entries
  end
end

スキーマの準備ができたら、「rake db:migrate」コマンドでテーブルを作るよ。

C:\rails\magica>rake db:migrate
(in C:/rails/magica)
== CreateUsers: migrating =====================================================
-- create_table(:users)
   -> 0.2600s
== CreateUsers: migrated (0.2600s) ============================================

== CreateCards: migrating =====================================================
-- create_table(:cards)
   -> 0.2500s
== CreateCards: migrated (0.2500s) ============================================

== CreateCardDetails: migrating ===============================================
-- create_table(:card_details)
   -> 0.2510s
== CreateCardDetails: migrated (0.2510s) ======================================

== CreateEntries: migrating ===================================================
-- create_table(:entries)
   -> 0.1800s
== CreateEntries: migrated (0.1800s) ==========================================


C:\rails\magica>

今日はここまで。次はカーディナリティ(「1対多」とかの数量の関連性)の設定をしてみるよ。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20070419