今回はRailsでDBのテーブル追加や更新などの手順をまとめようと思います。
テーブル追加
まずはテーブルを追加する際の手順です。
基本的には下記のようにして実行します。
$ rails model モデル名 属性名1: データ型 属性名2: データ型
属性とデータ型はカラムとカラムのデータ型の定義です。
カラムが多い場合にはモデル名だけ設定しても大丈夫です。その場合にはtimestamps(create_atとupdate_at)のみ作成されます。
例えば、カテゴリーテーブルを作成する場合には次のようなコマンドを実行します。
$ rails g model category
成功すると次のように作成されたファイルの一覧が表示されるはずです。
invoke active_record create db/migrate/20230819085954_create_categories.rb create app/models/category.rb invoke test_unit create test/models/category_test.rb create test/fixtures/categories.yml
「db/migrate/20230819085954_create_categories.rb」はマイグレーションファイルです。
「category.rb」はモデルのクラスファイルです。
「category_test.rb」はモデルのテストファイルです。
「categories.yml」はモデルのテストデータを作成する際に使用するfixtureファイルです。
マイグレーションファイルに次のようなカラムを追加します。
class CreateCategories < ActiveRecord::Migration[7.0] def change create_table :categories do |t| t.integer :category_id, null: false t.string :name, null: false t.timestamps end end end
Railsではidというカラムがあり、主キーのような一意の値を持ちます。 idではなく、独自のカラムを主キーにしたい場合には次のようにします。
class CreateCategories < ActiveRecord::Migration[7.0] def change create_table :categories, id: false do |t| t.integer :category_id, null: false, primary_key: true t.string :name, null: false t.timestamps end end end
id: false
を設定して、主キーにしたいカラムにprimary_key: true
を追加します。
初期データ追加
初期データを使用したい場合にはseedファイルを編集して、初期データを投入します。
Railsプロジェクトを作成したときにdb/seeds.rb
が作成されているはずですので、seeds.rbに初期データを記載します。
初期データを設定した上で、モデルを作成します。下記のようなイメージです。
User.create([ {name: "AAA"}, {name: "BBB"}, {name: "CCC"}, ])
seedファイルを編集した後は、rails db:seed
コマンドを実行してDBに反映させます。
テーブル削除
まずは、マイグレーションファイルを作成します。 Userテーブルを削除するとします。
$ rails g migration Drop Users
コマンドを実行すると、db/migrate配下にマイグレーションファイルが作成されていれば成功です。
次にマイグレーションファイルを編集します。
class DropUsers < ActiveRecord::Migration[7.0] def change drop_table :goal_images do |t| t.integer :name t.timestamps end end end
上記のように、drop_table
メソッドを使用します。ブロック内にはもともとあったカラムを記述します。
ファイルを編集したら下記コマンドでマイグレーションを実施します。
$ rails db:migrate
ここで注意しなければいけないことはテーブルは削除できても、モデルは別途削除する必要があります。 逆にモデルを削除するだけだとテーブルは削除できていないので、気をつけないといけません。
ロールバック
DBを1つ前の状態に戻すことができます。 次のコマンドで行います。
$ rails db:rollback
これにより、migrateする前の状態に戻ることができました。
最後に
今後追加していくと思います!!!