RoRでモデルとテーブルを作成

Ruby on Rails 3.0 日記の第5回に進みました。

書いてあるのをまねして実行していくだけ。

モデルの作成

$ rails generate model task name:string due_date:date done:boolean
      invoke  active_record
      create    db/migrate/20110510161130_create_tasks.rb
      create    app/models/task.rb
      invoke    test_unit
      create      test/unit/task_test.rb
      create      test/fixtures/tasks.yml

いくつかファイルができました。中身を見てみます。

★db/migrate/20110510161130_create_tasks.rb

class CreateTasks < ActiveRecord::Migration
  def self.up
    create_table :tasks do |t|
      t.string :name
      t.date :due_date
      t.boolean :done

      t.timestamps
    end
  end

  def self.down
    drop_table :tasks
  end
end

★app/models/task.rb

class Task < ActiveRecord::Base
end

★test/unit/task_test.rb

require 'test_helper'

class TaskTest < ActiveSupport::TestCase
  # Replace this with your real tests.
  test "the truth" do
    assert true
  end
end

★test/fixtures/tasks.yml

# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html

one:
  name: MyString
  due_date: 2011-05-10
  done: false

two:
  name: MyString
  due_date: 2011-05-10
  done: false

たぶん開発用のテーブル作成

$ rake db:migrate
(in /home/ec2-user/nchak)
==  CreateTasks: migrating ====================================================
-- create_table(:tasks)
   -> 0.0012s
==  CreateTasks: migrated (0.0013s) ===========================================

これでテーブルができたらしいです。

初期データの投入

サイトに書かれている通りにファイルを作りました。

★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

★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

tasks.rbを書き換えるとCSVからデータを読み込んで登録するというようなこともできそうですね。

次のコマンドを実行してデータの投入。

[ec2-user@ip-10-150-182-92 nchak]$ rake db:seed
(in /home/ec2-user/nchak)

なんかもうちょっと投入している感が伝わってくるような出力があっても良いのではないかと思ってしまいました。