(解決方法)Mysql2::Error: Field 'カラム名' doesn't have a default value


ユーザ管理機能実装にあたって、deviseを導入し、いざ新規登録をしようとすると、タイトルのエラーが発生した。
その解決方法と原因について記す。

解決方法

deviseのストロングパラメーターを設定する。
以下にコード例を示す。

application_controller
class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  private
  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :first_name, (複数のカラム名)])
  end
end

エラーが発生した原因

エラー文の内容は、『mysqlに指定したカラム名はデフォルトの値で設定されていません』というもの。
deviseにデフォルトで設定されているカラムは、emailとpasswordだけである。そのため、それ以外のカラムをdeviseを通じて保存しようとしても、当然ユーザ情報を保存できない。

なぜ解決されるのか

上記のコードにより、emailとpassword以外のカラムをユーザ情報として、deviseを通じて保存できるようにしている。
したがって、デフォルトで設定されていないカラムも保存できるようになり、エラーは解決される。