質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

822閲覧

新規ユーザ作成時に「undefined method `nickname' for nil:NilClass」というエラーが表示されます。

uoyuta

総合スコア7

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/08/18 12:47

#【解決したいこと】
下記のエラー内容を解決し、ユーザーの新規登録ができるようになりたいです。

#【エラー内容】
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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

undefined method `nickname' for nil:NilClass

このエラーメッセージは、
nilの変数には nickname ってメソッドは存在しない
という至極アタリマエのことを言ってます
nickname ってのがくっついてるヤツのナカミを確認してみては

投稿2021/08/18 21:48

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uoyuta

2021/08/18 23:50

ご回答ありがとうございます。 paramsの中身は下記になっていて、しっかりはいってるように思われます ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Parameters: {"authenticity_token"=>"9VD2gIg0OF62TEethtxK1M7Pbcb9Vv/Xi2pQDUxzo8inWWIhj6qpmoARk8oq8HrV3VuBUEq6TJqUT7WSG1oTww==", "user"=>{"nickname"=>"tarou", "email"=>"u@gmail.com", "password"=>"[FILTERED]", "check"=>"あり"}, "commit"=>"確認画面"}
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問