It's my first time to touch Rails migration, so I'll write it down briefly as a memorandum of study.
Migration is a convenient way to make continuous changes to your database schema unified and easy.
Prepare Company table as a sample
Column name | Data type |
---|---|
id | integer |
name | string |
description | text |
created_at | datetime |
updated_at | datetime |
$ rails g migration CrateCompany
Active Record automatically displays the migration execution order with the time stamp of the file name.
The created file is saved in the db / migrate
directory.
Created file
class CrateCompany < ActiveRecord::Migration[5.2]
def change
end
end
ActiveRecord :: Migration [] contains the version.
You can use up and down instead of change. In the up method, write the contents when migrating, and in the down method, write the contents when rolling back.
class CrateCompany < ActiveRecord::Migration[5.2]
def up
end
def down
end
end
Create a migrate file and type rails db: migrate
to run it.
Also, to undo the last change, rails db: rollback
class CrateCompany < ActiveRecord::Migration[5.2]
def change
create_table :companies do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
If you type this command, it will automatically create something like the above
$ rails g migration CrateCompany name:string description:text
class ChangeTableCompany < ActiveRecord::Migration[5.2]
def change
change_table :companies do |t|
t.remove :name
t.string :root_number
t.index :root_number
t.rename :description, :description_note
end
end
end
The migration above removes the name column, creates a string column, root_number, and adds the index to it. And finally, the description column is renamed.
change_column :companies, :root_number, :text
Changed the root_number
column of the model name to text
.
Note that change_column
cannot be rolled back with the change
method.
The change
method does not support it.
The migration definitions supported by change
are
add_column add_foreign_key add_index add_reference add_timestamps change_column_default (specifying: from and: to cannot be omitted) change_column_null create_join_table create_table disable_extension drop_join_table drop_table (must pass a block) enable_extension remove_column (type must be specified) remove_foreign_key (must specify second table) remove_index remove_reference remove_timestamps rename_column rename_index rename_table
If you want to roll back, you can use change_column
if it is an up or down method.
class ChangeColumnCompany < ActiveRecord::Migration[5.2]
def up
change_column :companies, :root_number, :text
end
def down
change_column :companies, :root_number, :string
end
end
I don't know much about migration yet, but I want to learn it.
Recommended Posts