はじめに
マグレーションファイルは以下のようにGeneratorで生成することができます。
$ rails generate migration AddPartNumberToProducts
参考: https://railsguides.jp/active_record_migrations.html
このGeneratorは特定のファイル名が与えられたとき、よしなにテンプレートファイルを出力します。
ここでは、Railsが用意しているパターンを調査し、マイグレーションファイルにどのような名前をつけるのがRails Wayに沿っているかを調査します。
add_X_to_Y
カラムやインデックスなどを追加するマイグレーションファイルを生成します。
$ rails g migration add_token_to_user auth_token:token
↓
class AddTokenToUser < ActiveRecord::Migration[7.0]
def change
add_column :users, :auth_token, :string
add_index :users, :auth_token, unique: true
end
end
remove_X_from_Y
カラムやインデックスなどを削除するマイグレーションファイルを生成します。
$ rails g migration remove_user_ref_from_products user:references
↓
class RemoveUserRefFromProducts < ActiveRecord::Migration[7.0]
def change
remove_reference :products, :user, null: false, foreign_key: true
end
end
join_table
名前の一部に join_table
が含まれているとテーブル結合を作成するマイグレーションファイルを生成します。
rails g migration create_join_table_customer_product customer product
↓
class CreateJoinTableCustomerProduct < ActiveRecord::Migration[7.0]
def change
create_join_table :customers, :products do |t|
# t.index [:customer_id, :product_id]
# t.index [:product_id, :customer_id]
end
end
end
create_X
テーブルを作成するマイグレーションファイルを生成します。
rails generate migration create_products name:string part_number:string
↓
class CreateProducts < ActiveRecord::Migration[7.0]
def change
create_table :products do |t|
t.string :name
t.string :part_number
t.timestamps
end
end
end
Railsのソースコード
メモとして残しておきます。
/lib/rails/generators/active_record/migration/migration_generator.rb
/lib/ruby/gems/2.7.0/gems/railties-7.0.0/lib/rails/generators/generated_attribute.rb
/lib/rails/generators/active_record/migration/templates/migration.rb.tt