LoginSignup
12
11

More than 3 years have passed since last update.

【Rails】テーブルの作成、カラムの追加、カラムの型の変更方法

Posted at

はじめに

ポートフォリオを作成していて、あとからカラムを追加したいときや、最初に設定したカラムの型を変更したいときに、どうすればよいのか分からなかったことがあったので、初学者なりに初学者がみてもわかりやすいようにまとめました。
(最初は既にあるマイグレーションファイルに直接追加や変更を加えればよいと思っていました。しかしそれは正しくないので、新たに別のマイグレーションファイルを作成して追加や変更する方法を記述していきます。)

モデルとテーブルの作成

下記のコマンドによりモデルを作成すると、モデルと一緒にこのモデルが担当するテーブルを作成するためのマイグレーションファイルが自動で作成されます。

$ rails g model [モデル名] [カラム名]:[カラムの型]

例えば、Userモデルを作成したい場合、[モデル名]にUser、[カラム名:カラムの型]にはname:string email:stringを指定します。コマンドは以下のようになります。

$ rails g model User name:string email:string

コマンドを実行すると以下のようなマイグレーションファイルが作成されます。

db/migrate/XXXXXXXXXXXXXX_create_users.rb
class CreateUsers < ActiveRecord::Migration[6.0]
  def change
    create_table :users do |t|
      t.string :name
      t.string :email

      t.timestamps
    end
  end
end

上記ファイルが生成されたのを確認し、次のコマンドでマイグレーションを実行します。

$ rails db:migrate

これでUsersテーブルが作成されました。

カラムの追加

既に作成したテーブルにカラムを追加したい場合は、既存のマイグレーションファイルに直接書き込むのではなく、新たにマイグレーションを作成して追加します。

カラムを追加する為のマイグレーションファイルの作成は次のコマンドになります。

$ rails g migration Add[カラム名]To[テーブル名] [カラム名]:[カラム型]

例えば既にあるusersテーブルにintroductionカラム(text型)を追加したい場合は以下になります。

$ rails g migration AddIntroductionToUsers introduction:text

コマンドを実行すると以下のようなマイグレーションファイルが作成されます。

db/migrate/XXXXXXXXXXXXXX_add_introduction_to_users.rb
class AddIntroductionToUsers < ActiveRecord::Migration[6.0]
  def change
    add_column :users, :introduction, :text
  end
end

上記ファイルが生成されたのを確認し、次のコマンドでマイグレーションを実行します。

$ rails db:migrate

これでusersテーブルにintroductionカラム(text型)が追加されました。

カラムの型の変更

既にあるテーブルのカラムの型を変えたいときは、カラム追加と似た手順で変更することができます。

カラムの型を変更する為のマイグレーションファイルの作成は次のコマンドになります。

$ rails g migration change_data_[カラム名]_to_[テーブル名]

例えば既にあるproductionsテーブルのmaterialカラムの型を変更したい場合は以下になります。

$ rails g migration change_data_material_to_productions

コマンドを実行するとマイグレーションファイルが作成されるので、変更したいカラムの型を追記します。
例えば、productionsテーブルのmaterialカラムの型をinteger型に変更したい場合は以下のように追記します。

db/migrate/XXXXXXXXXXXXXX_change_data_material_to_productions.rb
class ChangeDataMaterialToProductions < ActiveRecord::Migration[6.0]
<!-- ***** 以下を追加 ***** -->
  def change
    change_column :productions, :material, :integer
  end
<!-- ***** 以上を追加 ***** -->
end

追記が完了したら、次のコマンドでマイグレーションを実行します。

$ rails db:migrate

これでproductionsテーブルのmaterialカラムの型がinteger型に変更されました。

最後に

この記事は初学者がポートフォリオ作成中に学んだ事を初めてQiitaにまとめました。

内容的に間違いがあればぜひコメントいただけると嬉しいです。

12
11
1

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
12
11