0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Railsにおけるマイグレーション

Last updated at Posted at 2019-04-02

#はじめに
初投稿になります。
今回は、railsの学習でマイグレーションについて学んだのでまとめていこうと思います。

#マイグレーションとは?
railsにおけるマイグレーションとは、直接SQL文を実行しなくても、rubyでテーブルを操作できる仕組みのことです。
マイグレーションファイルはrubyで書くことができ、テーブルの作成・削除、カラムの追加・変更などを行うことができます。

#モデルの作成
マイグレーションを行うためにはまず、データベースのテーブルに対応するモデルを作成します。
今回は、会員制のアプリを作るため、メンバーモデルを作成しています。

rails g model member

モデルのクラス名は先頭が大文字の単数形になります。

menber.rb
class Member < ApplicationRecord
end

#マイグレーション
モデルを作成すると、db/migrateディレクトリの下に「年月日時分秒_create_テーブル名.rb」というファイルができます。このファイルをマイグレーションスクリプトといいます。
ここにデータベースの構成をrubyで書いていきます。

db/migrate/年月日時分秒_create_members.rb
class CreateMembers < ActiveRecord::Migration
  def change
    create_table :members do |t|
      t.string :name, null: false
      t.string :full_name
      t.string :email
      t.date :birthday
      t.integer :sex, null: false, default: 1               
      t.boolean :administrator, null: false, default: false
      
      t.timestamps
    end
  end
end

[null: false]というオプションは空の値は保存されないように制約を付けるためのものです。空の状態で保存しようとするとエラーになります。
また、t.timestampsによってcreate_atとupdate_atという時刻型のカラムが2つできます。Railsではレコードを作成した際にその時刻を自動的に作成し、更新したときにはその更新時刻を新しくするので、2つのカラムを作っておけばレコードの作成と更新の時刻を調べられるようになります。

マイグレーションを実行します。

migrate
rails db:migrate RAILS_ENV=production

本番用のデータベースにマイグレーションを行いたいときはRAILS_ENV=productionを付けてマイグレーションを実行します。
これで、データベースにマイグレーションファイルの構成を反映できました。

#おわりに
いずれ、マイグレーションの詳細(カラムの追加・変更、ロールバック、インデックス)についても追記していきます。

#参考文献
改訂4版 基礎 Ruby on Rails (IMPRESS KISO SERIES)
https://www.amazon.co.jp/改訂4版-Ruby-Rails-IMPRESS-KISO/dp/429500460X

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?