#目的
マイグレーションファイルを作成する際に
作成のみでなく閲覧者などにもわかりやすい命名にするため規則などを記載していく
#taskテーブルを作成
rails g migration CreateTasks name:string content:text
class CreateTasks < ActiveRecord::Migration[5.2]
def change
create_table :tasks do |t|
t.string :name
t.text :content
end
end
#taskテーブルにカラムを追加
rails g migration AddStateToTasks state:string
rails g migration add_state_to_tasks state:string
class AddStateToTask < ActiveRecord::Migration[5.2]
def change
#[形式]add_column(テーブル名,カラム名,データ型)
add_column :tasks, :state, :string
end
end
add_columnには次のオプションを指定することができる。
・ null:true … NOT NULL制約を削除
・ null:true … NOT NULL制約を追加
・ limit: size … ファイルのサイズに対する制限を設定
・default:[val]… [val]に設定した値をレコード作成じのカラムのデフォルト値とする
#taskテーブルに追加したカラム名を変更
rails g migration RenameFromStateToTasks
rails g migration rename_state_to_tasks
class RenameFromStateToTasks < ActiveRecord::Migration[5.2]
def change
#[形式]rename_column(テーブル名,変更前のカラム名,変更後のカラム名)
rename_column :tasks,:state,:status
end
end
#taskテーブルに追加したカラムのデータ型を変更
rails g migration ChangeStatusOfTasks
rails g migration change_datatype_status_of_tasks
class ChangeDatatypeStatusOfTasks < ActiveRecord::Migration[5.2]
def up
#[形式]change_column(テーブル名,カラム名,データタイプ,オプション)
change_column :tasks, :status, :integer
# オプション
# limit - カラム長の最大数
# change_column :tasks, :status, :integer, limit: 120
# default - カラムのデフォルト値を設定。NULLにしたい場合は、nilを指定
# change_column :tasks, :status, :integer, default: "タイトルがありません"
# null - null制約を設定。false -> null制約がON。true -> null制約がOFF
# change_column :tasks, :status, :integer, null: true
end
end
#taskテーブルに追加したカラムにインデックスやユニーク制約の追加
rails g migration AddIndexStatusToTasks
rails g migration add_index_Status_to_tasks
class AddIndexStatusToTasks < ActiveRecord::Migration[5.2]
def change
add_index :tasks, :status
#add_index :tasks, :status ,unique: true ユニーク制約も付加可能
end
end
#taskテーブルに追加したカラムにNULL制約の追加
rails g migration ChangeNotNullToTasks
rails g migration change_notnull_to_tasks
class ChangeNotNullToTasks < ActiveRecord::Migration[5.2]
def change
#tasksテーブルのstatusにNOT NULL制約を追加
change_column_null :tasks, :status, false
end
end