U_OK_2023’s blog

主に日々のプログラミング学習についてのアウトプットと備忘録

本日のオリジナルアプリ実装備忘録

 

・⭐️オリジナルアプリにおいてタスク管理を実装

スプレッドシートにて作成し、Githubのissueにて管理できるようにした

 

・⭐️ユーザー管理機能の追加実装

ユーザー新規登録画面にて「役職」「所属」情報を入力するフォームを追加および、

入力した情報を保存できるようにしました。

 

しかしここで「役職」「所属」情報を保存のためカラムを追加した際、

NOT NULL制約を設定することを忘れしまったので、
設定しようとしてエラーが発生しました

Invalid use of NULL value

 

エラーメッセージ「Invalid use of NULL value」は、
現在(既存)のデータベーステーブルの positionカラムにNULLが含まれている状態で、このカラムに対してNOT NULL制約を追加しようとしたことを示している。
すでにNULLが存在するカラムに対してNOT NULL制約を追加すると、
データの整合性が保たれないためエラーが発生するとのこと。

 

解決方法1️⃣

テーブルの空白の「役職」「所属」カラムに
直接手入力する これでもエラーは解決される。
とのことですが、
データが多い場合や、手入力だとミスが出るリスクがある とのことで非推奨とのこと

(確かにその通りだと思います)

 

解決方法2️⃣

マイグレーションファイルを再度修正してデフォルト値を設定。
デフォルト値として空文字列('')を設定する。

class ChangeColumnsToUsers < ActiveRecord::Migration[7.0]
 def up
  User.where(position: nil).update_all(position: '')
  User.where(affiliation: nil).update_all(affiliation: '')
  change_column :users, :position, :string, default: '',null: false
  change_column :users, :affiliation, :string, default: '', null: false
 end
  def down
  change_column :users, :position, :string, default: nil, null: true
  change_column :users, :affiliation, :string, default: nil, null: true
 end
end

再度マイグレーションを実行

rails db:migrate

 

で解決することができました。

 

気付き:

マイグレーション実行後に、NOT NULL制約付きでカラムを追加する場合は、

特別な追加方法が必要だと分かりました。

追加実装をしないように、計画を固めてから実装することが大切だと感じました。