前提・実現したいこと
- rails6でマイグレーションをしているのですが、unique属性がつきません。
- また、
add_index
を使って、制約をつけているのですがエラーになります。
発生している問題・エラーメッセージ
1.の場合(rails db:migrate:reset
の後、sqlite3で確認)
sqlite
1sqlite> .schema 2CREATE TABLE "schema_migrations" ("version" varchar NOT NULL PRIMARY KEY); 3CREATE TABLE "ar_internal_metadata" ("key" varchar NOT NULL PRIMARY KEY, "value" varchar, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL); 4CREATE TABLE "users" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "email" varchar(255) NOT NULL, "password" varchar(60) NOT NULL, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL);
2.の場合
[user1 app]$ rails db:migrate:reset Dropped database 'db/development.sqlite3' Dropped database 'db/test.sqlite3' Created database 'db/development.sqlite3' Created database 'db/test.sqlite3' == 20201215054558 CreateUsers: migrating ====================================== -- create_table(:users) -> 0.0038s -- add_index(:users, :email, {:null=>false, :limit=>255, :unique=>true}) rails aborted! StandardError: An error has occurred, this and all later migrations canceled: Unknown key: :null. Valid keys are: :unique, :length, :order, :opclass, :where, :type, :using, :comment, :algorithm
該当のソースコード
1.の場合
rb
1class CreateUsers < ActiveRecord::Migration[6.1] 2 def change 3 create_table :users do |t| 4 t.string :email, null: false, limit: 255, unique: true 5 t.string :password, null: false, limit: 60 6 7 t.timestamps 8 end 9 10 end 11end
2.の場合
rb
1class CreateUsers < ActiveRecord::Migration[6.1] 2 def change 3 create_table :users do |t| 4 t.string :email 5 t.string :password 6 7 t.timestamps 8 end 9 10 add_index :users, :email, null: false, limit: 255, unique: true 11 add_index :users, :password, null: false, limit: 60 12 13 end 14end 15
unique制御を入れた途端エラーを吐いているなら、入れようとしたデータにユニークでないものが混じってませんか?