ログアウトしようとしたらエラーが出てしまった。
エラー文
undefined method `id' for nil:NilClass
posts_controller.rb
def index
@posts = Post.all.includes(:user).order("created_at DESC").page(params[:page]).per(5)
@post = Post.new
#エラーが出たのはこの部分↓↓↓
@calorie_sum = Post.where(user_id: current_user.id, created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day).sum(:calorie)
gon.today_sum = @calorie_sum
@standard = Standard.find_by(user_id: current_user.id)
@calorie_standard = @standard.calorie
gon.standard = @calorie_standard
if @calorie_sum >= @calorie_standard
@difference = @calorie_sum - @calorie_standard
else
@difference = @calorie_standard - @calorie_sum
end
end
なぜこのエラーが生じたのか?
posts_controller.rb
@calorie_sum = Post.where(user_id: current_user.id, created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day).sum(:calorie)
エラーが出たこのコードはどういう意味かというと、
Postモデル(投稿データが入ってる)から、
今日1日のcurrent_userの投稿を検索して抽出して、calorieカラムの数値を合計した結果をcalorie_sum
というインスタンス変数に代入してる。
なんでエラーになるかというと、
ログアウトするとuser_id: current_user.id
のidのところがnilになってしまうから。
解決するにはどうすればいいのか?
current_user.idがnilでもエラーにならないようにするためには、
posts_controller.rbを条件分岐で書けばいい気がする。
こんな感じでどうだろうか?
posts_controller.rb
def index
@posts = Post.all.includes(:user).order("created_at DESC").page(params[:page]).per(5)
@post = Post.new
# サインインしてる時だけ今日の摂取カロリーを表示するグラフを作るためのデータを取得する下記の関数が動く
if user_signed_in?
@calorie_sum = Post.where(user_id: current_user.id, created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day).sum(:calorie)
gon.today_sum = @calorie_sum
@standard = Standard.find_by(user_id: current_user.id)
@calorie_standard = @standard.calorie
gon.standard = @calorie_standard
if @calorie_sum >= @calorie_standard
@difference = @calorie_sum - @calorie_standard
else
@difference = @calorie_standard - @calorie_sum
end
else
# サインインしてない時は何も動かない
end
end
これにあとviewのグラフの部分を- if user_signed_in?
で条件分岐して、サインインしてない時はグラフが出てこないようにしたら、無事解決しました。