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に変更することでテストのパスを確認。


