Ruby on Rails 3.0 日記
第5回: データベーステーブルとモデル
前回は、タスク管理ツールのレイアウトを整えました。
今回は、タスクの中身を記録するデータベーステーブルとそれを取り扱うモデルクラスを作り、開発作業に必要な初期データを投入しましょう。
データベーステーブルとモデルの生成
Ruby on Rails の慣習に従い、タスクを記録するテーブルの名前を tasks、それに対応するモデルのクラス名を Task にします。
tasks テーブルは name, due_date, done という3つのカラムを持ちます。データ型はそれぞれ String, Date, Boolean とします。
ターミナルで、次のコマンドを実行します。
rails generate model task name:string due_date:date done:boolean rake db:migrate
この結果、db ディレクトリの下に development.sqlite3 というファイルができているはずです。ここに空の tasks テーブルが格納されています。
シードデータの投入
アプリケーションの開発をする上で、データベースが空っぽではやりづらいので、初期データ(シードデータ)を投入します。
エディタで db/seeds.rb を開き、全部消してから、次のコードを記入してください。
table_names = %w(tasks)
table_names.each do |table_name|
path = "#{Rails.root}/db/seeds/#{Rails.env}/#{table_name}.rb"
require(path) if File.exist?(path)
end
Rails 2.3 までは、アプリケーションのルートディレクトリを参照するとき RAILS_ROOT という定数を使用しましたが、Rails 3.0 では Rails.root というクラスメソッドで参照します。また、現在の環境名についても、定数 RAILS_ENV ではなく Rails.env で参照します。
続いて、db ディレクトリの下に seeds/development ディレクトリを作成します。
その下に新しく tasks.rb ファイルを作成して、次のコードを記入します。
Task.create(:name => "Task 0", :due_date => Date.today, :done => true)
1.upto(9) do |n|
Task.create(:name => "Task #{n}", :due_date => n.days.from_now, :done => false)
end
この Ruby プログラムは、「Task 0」から「Task 9」までの 10 個のタスクをデータベースに投入します。「Task 0」は今日が期限で、done カラムが true 値を持っています。その他のタスクは明日以降が期限で、done カラムの値は false です。
実際に、シードデータを投入するには、次のコマンドを実行します。
rake db:seed
シードデータを投入し直すには、次のコマンドを実行します。
rake db:reset
Rake タスク db:reset は、データベースを drop して全テーブルを作り直してからシードデータを投入しますので、ご注意ください。
(2010/05/01)
記事に関するご質問は、 hermes@oiax.jp までメールでお送りください。
ウェブサイト構築の発注先を検討されているお客様は、ご相談フォームをご利用ください。
- はじめに
- 第1回: インストール (2010/04/24)
- 第2回: 新規アプリケーションの作成 (2010/04/25)
- 第3回: コントローラとビューの生成(1) (2010/04/28)
- 第4回: コントローラとビューの生成(2) (2010/04/29)
- 第5回: データベーステーブルとモデル (2010/05/01)
- 第6回: タスクの一覧 (2010/05/02)
- 第7回: タスクの新規追加フォーム (2010/05/09)
- 第8回: タスクの新規追加 (2010/05/09)
- 第9回: タスクの完了 (2010/05/15)
- 第10回: 完了したタスクの一覧 (2010/05/16)
- 第11回: Bundler (2010/05/17)
- 第12回: ユーザー認証(1) (2010/05/18)
- 第13回: ユーザー認証(2) (2010/05/19)
- 第14回: ユーザーとタスクの関連づけ (2010/05/29)
- 第15回: Devise によるユーザー認証機能の日本語化(1) (2010/10/09)
- 第16回: Devise によるユーザー認証機能の日本語化(2) (2010/10/15)
- 第17回: Devise によるユーザー認証機能の日本語化(3) (2010/10/16)

