#【解決したいこと】
下記のエラー内容を解決し、ユーザーの新規登録ができるようになりたいです。
#【エラー内容】
NoMethodError in Users::Registrations#confirm
Showing /Users/uot/projects/subscription/app/views/devise/registrations/confirm.html.erb where line #14 raised:
undefined method `nickname' for nil:NilClass
※エラー画像
https://gyazo.com/d1fb9c71bd68a796e7095fa1e8df1b08
#【エラー発生経緯】
実装したい流れは、このような形になります。
ユーザー新規登録情報を投入→確認画面→登録完了
今回は、ユーザー新規登録情報を投入し、確認画面が表示される前にエラーが発生してしまいます。
#【コード】
◇エラーの対象のコード
①confirm.html.erb (確認画面)
html
1<%= render "shared/header" %> 2<body> 3 4 5<div class = "confirm"> 6 <h2 class ="user-check">入力情報の確認</h2> 7 8 <%= form_with model: @user, url: user_registration_path do |f| %> 9<div class='confirmform-wrap'> 10 11<div class = "chack-box"> 12 <p>ニックネーム</p> 13 <div class="box17"> 14 <%= f.text_field :nickname, value: @user.nickname,class:"check-letter", style: "border: none",readonly: true %> 15 </div> 16</div> 17 18<div class = "chack-box"> 19 <p>email</p> 20 <div class="box17"> 21 <%= f.text_field :email, value: @user.email,class:"check-letter",style: "border: none",readonly: true %> 22 </div> 23</div> 24 25 26 <div class = "chack-box"> 27 <p>password</p> 28 <div class="box17"> 29 <%= f.text_field :password, value: @user.password ,class:"check-letter" ,style: "border: none",readonly: true %> 30 </div> 31 </div> 32 33 <div class = "chack-box"> 34 <p>お知らせ</p> 35 <div class="box17"> 36 <%= f.text_field :check, value: @user.check,class:"input-default" ,class:"check-letter" ,style: "border: none",readonly: true %> 37 38 </div> 39 </div> 40 41 <div class = "confirm.submit"> 42 <div class = "submit-box"> 43 <%= f.submit "修正する", name: :back , :class=> "submit-botan" %> 44 <%= f.submit "登録する" ,:class=> "submit-botan"%> 45 </div> 46 </div> 47 48</div> 49 <% end %> 50</div> 51</body>
②new.html.erb (新規登録画面)
html
1<%= render "shared/header" %> 2 3 4<h2 class="views-title">ユーザー新規登録</h2> 5 6<%= form_with model: @user, url: users_sign_up_confirm_path(@user), local: true do |f| %> 7 <%= render "devise/shared/error_messages", resource: resource %> 8 9<div class='form-wrap'> 10 11 <div class = "form-box"> 12 <%= image_tag "user.png", class:"newicon-image" %> 13 <div class="form-group"> 14 <div class='form-text-wrap'> 15 <label class="form-text">ニックネーム</label> 16 </div> 17 <%= f.text_area :nickname, id:"nickname", placeholder:" 例) Tarou", class:"input-default",maxlength:"40" %> 18 </div> 19 </div> 20 21 <div class = "form-box"> 22 <%= image_tag "email.png", class:"newicon-image" %> 23 <div class="form-group"> 24 <div class='form-text-wrap'> 25 <label class="form-text">email</label> 26 </div> 27 <%= f.email_field :email, class:"input-default", id:"email", placeholder:" PC・携帯どちらでも可", autofocus: true %> 28 </div> 29 </div> 30 31<div class = "form-box"> 32 <%= image_tag "password.jpeg", class:"newicon-image" %> 33 <div class="form-group"> 34 <div class='form-text-wrap'> 35 <label class="form-text">Password</label> 36 </div> 37 <%= f.password_field :password, class:"input-default", id:"password", placeholder:" 6文字以上の半角英数字" %> 38 <p class='info-text'>※英数混合の6文字以上</p> 39 </div> 40 </div> 41 42 43 <div class = "form-box"> 44 <%= image_tag "check.png", class:"newicon-image" %> 45 <div class="form-group"> 46 <div class='form-text-wrap'> 47 <label class="form-text">お知らせ</label> 48 </div> 49 <label><%= f.radio_button :check, "あり" %> あり </label> 50 <label><%= f.radio_button :check, "なし" %> なし </label> 51 </div> 52 </div> 53 54 <div class="actions"> 55 <%= f.submit "確認画面" , :class=> "submit-botan" %> 56 </div> 57 58</div> 59<% end %> 60
②registrations_controller.rb (ユーザーコントローラ)
controller
1class Users::RegistrationsController < Devise::RegistrationsController 2 3 4def destroy 5 @user = User.find(params[:format]) 6 @user.destroy 7 flash[:notice] = 'ユーザーを削除しました。' 8 redirect_to :root 9end 10 11 def create 12 @user = User.new(sign_up_params) 13 render :new and return if params[:back] 14 super 15 end 16 17 def update_without_current_password(params) 18 if params[:password].blank? && params[:password_confirmation].blank? 19 params.delete(:password) 20 params.delete(:password_confirmation) 21 end 22 update(params) 23 end 24 25 def update 26 if current_user.update(user_params) 27 redirect_to root_path 28 else 29 render :edit 30 end 31 end 32 33 protected 34 def update_resource(resource, params) 35 resource.update_without_password(params) 36 end 37 38 # 新規追加 39 def confirm 40 @user = User.new(sign_up_params) 41 42 end 43 44 # 新規追加 45 def complete 46 end 47 48 # アカウント登録後 49 def after_sign_up_path_for(resource) 50 users_sign_up_complete_path(resource) 51 end 52 53 private 54 def user_params 55 params.require(:user).permit(:nickname, :email, :password, :check) 56 end 57 58end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/18 23:50