FBCのdevise gemを使ったプラクティスを進行中です。 今回作成するRailsアプリではdevise gemを使った認証機能とプロフィールページの作成が終了条件になっています。 このプロフィールページにはdeviseのデフォルトで設定されるメールアドレスに加えて、郵便番号、住所、自己紹介文を表示できることが終了条件になっています。 Usersテーブルに郵便番号、住所、自己紹介文を保存するカラムが必要なのでRailsでテーブルにカラムを追加する方法を調べました。
結論
Railsにテーブルへのカラム追加は次の手順で行う。
rails g migration
コマンドでmigrationファイルを作成。rails db:migrate
コマンドでテーブルへのカラム追加を反映する。
追加するカラムについて
Usersテーブルに追加するカラムのカラム名とデータ型は次のように選定しました。
カラム | カラム名 | データ型 |
---|---|---|
郵便番号 | zipcode |
integer |
住所 | address |
string |
自己紹介文 | profile |
text |
データ型の選定についてはあまり自信がないので深堀りした内容を別の記事にまとめようと思います。
実際にカラムを追加してみる
例としてUsersテーブルに上記カラムを追加してみます。
1. カラム追加前の状態を確認
カラム追加前のUsersテーブルのカラムの状態をcolumn_names
メソッドで確認します。
$ rails c irb(main):002:0> User.column_names => ["id", "email", "encrypted_password", "reset_password_token", "reset_password_sent_at", "remember_created_at", "created_at", "updated_at"]
Railsとdevise gemが自動生成した計8つのカラムが存在しているのを確認できました。
2. migrationファイルの作成
下記コマンドでmigrationファイルを作成できます。
Active Record マイグレーション - Railsガイド
$ rails g migration Addカラム名Toテーブル名 カラム名1:データ型 カラム名2:データ型 ...
ちなみにですが、rails g
コマンドはキャメルケース、スネークケースどちらでも大丈夫みたいです。
rails generateコマンドには、キャメルケースでもスネークケースでもどちらでも良い
zipcode
、address
、profile
カラムを追加するmigrationファイルを作成します。
$ rails g migration AddColumnsToUsers zipcode:integer address:string profile:text Running via Spring preloader in process 41547 invoke active_record create db/migrate/20220903210311_add_columns_to_users.rb
作成されたマイグレーションファイルを確認します。
ファイル名はYYYYMMDDHHMMSS_add_columns_テーブル名.rb
で作成されています。
# db/migrate/YYYYMMDDHHMMSS_add_columns_to_users.rb class AddColumnsToUsers < ActiveRecord::Migration[6.1] def change add_column :users, :zipcode, :integer add_column :users, :address, :string add_column :users, :profile, :text end end
foreign key
等のカラム毎の追加設定が必要な場合はこの時点で追記することで指定できるようです。
rails generate migrationコマンドまとめ - Qiita
3. migrationファイルを反映
rails db:migrate
コマンドでmigrationファイルを反映してカラムを追加します。
$ rails db:migrate Running via Spring preloader in process 42834 == 20220903210311 AddColumnsToUsers: migrating ================================ -- add_column(:users, :zipcode, :integer) -> 0.0052s -- add_column(:users, :address, :string) -> 0.0004s -- add_column(:users, :profile, :text) -> 0.0003s == 20220903210311 AddColumnsToUsers: migrated (0.0061s) =======================
4. カラム追加後の状態を確認
カラムの追加を確認します。
$ rails c irb(main):001:0> User.column_names => ["id", "email", "encrypted_password", "reset_password_token", "reset_password_sent_at", "remember_created_at", "created_at", "updated_at", "zipcode", "address", "profile"]
zipcode
、address
、profile
カラムが追加され合計11のカラム数になりました。
まとめ
generate
系のコマンドは便利だけどやれる事が多すぎるので1つづつ確認しながら慣れていく必要がありそうです。
たくさん触って覚えていこう。