#前置き
deviseを導入して、rails g devise:installで設定ファイルをrailsアプリケーションに作成。
rails g devise:install
その後rails g devise userでdeviseのuserモデルを作成。
rails g devise user
これでuser.rbやマイグレーションファイルなどができるので、nicknameカラムをnull: falseで追加。そしてrake db:migrate。
t.string :nickname, null: false
rake db:migrate
元々emailカラムとencrypted_passwordカラムが入ったdeviseのuserテーブルにnicknameカラムの入ったものが出来上がったので次に移る。
rails g devise:viewsでdeviseのviewを作成した後に、下記のようにnicknameのフォームを追加して、名前、email、パスワードをテーブルに新規登録するするフォームが出来上がった。
rails g devise:views
<div class="field">
<%= f.label :nickname %><br />
<%= f.text_field :nickname, autofocus: true %>
</div>
#ここから本題
前置きが長くなってしまったけれど、詰まったところはここから。
全てのフォームに情報を入力し、signupを押すと、、
Field 'nickname' doesn't have a default valueというエラーに。
※エラー画像はうまく画像が表示されないので割愛。
#原因
調べたら、nicknameが空だと言っていると判明。
ちゃんとデータとんでいるのになんで?
と思って調べたら、deviseのコントローラはデフォルトで入っているemailとパスワードのみを受け取るストロングパラメータが設定されているらしい。。ので、
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :configre_permitted_parameters, if: :devise_controller?
def configre_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname])
end
end
これでなんとかエラーは解消。usersテーブルにもデータ入ってるのを確認。
#まとめ
前半、書くこと忘れてdeviseの導入手順みたいになってしまったけど、必要なところは本題だけかなと。エラー画像Gyazo使って載せようとしたけれどなぜか載せれず。それを調べる気力がなくなってしまったので寝