Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

herokuでデプロイ後のActionView::Template::Error

解決したいこと

ここに解決したい内容を記載してください。
例)
Ruby on Railsで食事管理アプリのようなWebアプリをつくっています。
herokuでデプロイ後に、ActionView::Template::Error (undefined method `created_at' for nil:NilClass):
のエラーが発生しました。
解決方法がわからず時間だけが過ぎてっている状態です。
local環境下ではきちんと作動しています。
大した問題ではないと思いますが、理解できていない部分があり滞っていますので、解決方法をご教授いただければ幸いです。

発生している問題・エラー

ActionView::Template::Error (undefined method `created_at' for nil:NilClass):

heroku logs --tail --app fasting-balance1 のlog画像です。
https://gyazo.com/8f4368715e81967ad664cae7e2e3440a

該当するソースコード

fastings/index
<div class='new-record'>
            <span class='memory-title'>前回の記録</span>
          <div class='memory'>
            <div class='end-date'>
              <%= @personal.created_at.to_s(:datetime_jp) %>
            </div>
            <span class='weight'>体重:</span><%= @personal.body_weight %>kg
            <span class='fitness'>運動:</span><%= @personal.motion.name %>
            <% unless @personal.motion_id == 2 %>
              <%= @personal.motion_time.name %>!
            <% end %>
          </div>
        </div>
fastings_controller.rb
class FastingsController < ApplicationController

  def index
    @fastings = Fasting.all
    @personal = Fasting.last
    @fasting = Fasting.new
    @memos = Memo.all
    @memo = Memo.new
  end

  def create
    fasting = Fasting.new(fasting_params)
    if fasting.save
      redirect_to root_path
    else
      render :index
    end
  end

  def destroy
    fasting = Fasting.find(params[:id])
    fasting.destroy
    redirect_to root_path
  end

  private

  def fasting_params
    params.require(:fasting).permit(:body_weight, :motion_id, :motion_time_id)
  end

end

自分で試したこと

・config/database.yml内で、本番環境の記述がきちんとなされているか確認。→問題なし
https://gyazo.com/983abfbd53d1e26b856f43353dc0b025

・heroku上にマイグレートupされているか確認。→一応heroku run rails db:migrateを実行し直しました。

・herokuは最新かどうか。→最新です。

'created_at'日本時間表記 参考

https://qiita.com/tomo_k09/items/e4f19947d35890500492

よろしくお願いします。

0

1Answer

Fasting レコードが1件もないのに表示させようとしていませんか?1件もないとき Fasting.last は nil を返すので @personal に nil が入ります。 @personal が nil ではないときだけ前回の記録を表示するようにしてみては。

<% if @personal %>
  (前回の記録を表示する部分)
<% end %>
0Like

Comments

  1. @nakaba19990224

    Questioner

    @uasiさんありがとうございます!
    言われた通りやってみたら解決できました!
    ローカルでは画像があったので表示されていましたが、一度空にしたら同じエラーが出ました!
    自分の中では、DBの中が空の場合を考えずにエラーを解消しようとしていたので、次からは今回を踏まえて『レコードがからの場合』をしっかり想定していきます!

    @uasiさんのおかげでまた成長できました!ありがとうございました!

Your answer might help someone💌