Ruby on Railsチュートリアル第11章まで学習が進みました。
この章の冒頭で紹介されているメイラー構築作業でテストエラーが何度も発生していたため、解消方法を記載しておきます。
【エラー名称】
NoMethodError: undefined method `remember_token’ for nil:NilClass
【改善方法】
Railsチュートリアル第11章のアカウント有効化に関する統合テストにおいて、
【test/integration/users_login_test.rb】内のassigns(:user).remember_tokenに関する問題。
assigns(:user)でSessionControllerの@user変数を取れる一方、チュートリアル内のsessions_controller.rbに記述しているcreateに定義されているuserが@userとなっていないために発生した。
このため、SessionController#createで@userへの代入を行っていなかった為nilになってしまい、統合テストでエラーとして検出された。
【修正方法】
【app/controllers/sessions_controller.rb】 def create user = User.find_by(email: params[:session][:email].downcase) if user && user.authenticate(params[:session][:password]) log_in user params[:session][:remember_me] == '1' ? remember(user) : forget(user) redirect_back_or user else flash.now[:danger] = 'Invalid email/password combination' render 'new' end end ↓ def create @user = User.find_by(email: params[:session][:email].downcase) if @user && @user.authenticate(params[:session][:password]) log_in @user params[:session][:remember_me] == '1' ? remember(@user) : forget(@user) redirect_back_or @user else flash.now[:danger] = 'Invalid email/password combination' render 'new' end end
sessions_controller.rb#createの記述をuserから@userに変更することでテストのパスを確認。