前提・実現したいこと
プログラミング初心者です。
Railsでアンケートを共有するSNSを作っています。
投稿機能を実装中に無効な投稿をした際にFlashメッセージを表示し,表示したいビューをレンダリングする際に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
NoMethodError in Microposts#create
Showing /home/ubuntu/environment/docs_comm/app/views/users/show.html.erb where line #6 raised:
undefined method `email' for nil:NilClass
該当のソースコード
Rails
1module UsersHelper 2 3 # 引数で与えられたユーザーのGravatar画像を返す 4 def gravatar_for(user, options = { size: 80 }) 5 gravatar_id = Digest::MD5::hexdigest(user.email.downcase) 6 size = options[:size] 7 gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?s=#{size}" 8 image_tag(gravatar_url, alt: user.name, class: "gravatar") 9 end 10end
Rails
1<div class="container"> 2 <div class="row"> 3 <aside class="col-md-8"> 4 <section class="user_info"> 5 <h1> 6 <%= gravatar_for @user %> 7 <%= @user.name %> 8 </h1> 9 </section> 10 <section class="micropost_form"> 11 <%= render 'shared/micropost_form' %> 12 </section> 13 </aside> 14 <div class="col-md-8"> 15 <% if @user.microposts.any? %> 16 <h3>投稿 (<%= @user.microposts.count %>)</h3> 17 <ol class="microposts"> 18 <%= render @microposts %> 19 </ol> 20 <%= will_paginate @microposts %> 21 <% end %> 22 </div> 23 </div> 24</div>
Rails
1class MicropostsController < ApplicationController 2 before_action :logged_in_user,only:[:create,:destroy] 3 def create 4 @micropost = current_user.microposts.build(micropost_params) 5 if @micropost.save 6 flash[:success] = "フォームが投稿されました" 7 redirect_to root_url 8 else 9 render template: 'users/show' #どこをレンダリングさせるべきかわかっていない 10 end 11 end 12 13 14 def destroy 15 end 16 17 def micropost_params 18 params.require(:micropost).permit(:content) 19 end 20end
Rails
1<%= form_for(@micropost) do |f| %> 2 <%= render 'shared/error_messages', object: f.object %> 3 <div class="field"> 4 <%= f.text_area :content, placeholder: "https://docs.google.com/forms/d/e/1FAIpQLS..." %> 5 </div> 6 <%= f.submit "投稿", class: "btn btn-primary" %> 7<% end %>
試したこと
gravatar絡みのエラーだと思い、該当コードを消したら動くかなど試してみましたがいまいちピンときませんでした。なんとなく初歩的な問題だろうとは感じていますが初めて自力で対処できない問題に直面したのでお力をお借りしたいです。
補足情報(FW/ツールのバージョンなど)
Rails 5.1.6
Ruby 2.6.3
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。