6.1.1 データベースの移行
rails generate controller Users new
Userモデルを生成する
rails generate model User name:string email:string
Userモデルのマイグレーションdb/migrate/[timestamp]_create_users.rb
class CreateUsers < ActiveRecord::Migration[5.1]
def change
create_table :users do |t|
t.string :name
t.string :email
t.timestamps
end
end
rails db:migrate
演習
1:Railsはdb/ディレクトリの中にあるschema.rbというファイルを使っています。
これはデータベースの構造 (スキーマ (schema) と呼びます) を追跡するために
使われます。さて、環境にあるdb/schema.rbの内容を調べ、その内容と
マイグレーションファイルの内容を比べてみてください。
schema.rb ActiveRecord::Schema.define(version: 20170203234505) do create_table "users", force: :cascade do |t| t.string "name" t.string "email" t.datetime "created_at", null: false t.datetime "updated_at", null: false end end
20200203234505_create_users.rb class CreateUsers < ActiveRecord::Migration[5.0] def change create_table :users do |t| t.string :name t.string :email t.timestamps end end end
2:ほぼすべてのマイグレーションは、元に戻すことが可能です
元に戻すことを「ロールバック (rollback)と呼び、
Railsではdb:rollbackというコマンドで実現できます。
rails db:rollback上のコマンドを実行後、db/schema.rbの内容を調べてみて、
ロールバックが成功したかどうか確認してみてください。
Railsではdb:rollback
コマンドして、ロールバックの成功を確認
3:もう一度rails db:migrateコマンドを実行し、db/schema.rbの内容が元に戻ったことを確認してください。
rails db:migrate
schema.rb ActiveRecord::Schema.define(version: 0) do end
User.createでモデルの生成と保存を同時におこなう方法も提供されています。
User.createは、trueかfalseを返す代わりに、ユーザーオブジェクト自身を返す
ことに注目してください。
返されたユーザーオブジェクトは (上の2つ目のコマンドにあるfooのように) 変数に代入することもできます。