くま's Tech系Blog

基本的には技術で学んだことを書き留めようと思います。雑談もやるかもね!

RailsでのDBあれこれ

今回は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する前の状態に戻ることができました。

最後に

今後追加していくと思います!!!

参照

zenn.dev

toshpit.com

k-koh.hatenablog.com

vdeep.net

zenn.dev

qiita.com