Techioz Blog

Railsで作業していて、データベースに行を作成しようとすると、not null例外が失敗したと表示されます

概要

class AddPlacesTable < ActiveRecord::Migration[7.0]
  def change
    create_table :places, id: :uuid do |t|
      t.string :name, null:false
      t.string :address, null:false
      t.string :city, null:false

      t.timestamps
    end
  end
end

これは私のデータベース ファイルであり、次のようなエラーがスローされます。

SQLite3::ConstraintException: NOT NULL constraint failed: places.id (ActiveRecord::NotNullViolation)

私のモデルファイルは空で、ApplicationRecordから継承しているクラスがあるだけです。

データベースに行を作成し始めると、places.idにnullが表示されますが、主キーであるため、Railsは自動的に値を割り当てるべきだと思います。

解決策

id が uuid 型であることを Rails に伝えたため、爆発しています。

Rails は uuid を作成する方法を知りません。 Rails アプリの通常のことは、ID 列のタイプを指定しないことです。これは整数で自動的に作成され、自動的に入力されます。 uuid タイプを指定することで、通常のデフォルトの動作を実行しないように Rails に指示し、それを実行できるようにします。

それを行わずにテーブルを再作成すれば、すぐに作業を進めることができます。