🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails 6

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

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Q&A

解決済

1回答

1582閲覧

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

moto12

総合スコア15

Ruby on Rails 6

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

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

0グッド

0クリップ

投稿2021/01/10 02:07

前提・実現したいこと

作成したアプリケーションをherokuにデプロイし、本番環境でエラーがでるページがあります。具体的には、current_sign_in_at.strftimeを書いているページです(current_sign_in_at.strftimeの記述を消せばエラーは出ない)。

しかし、最終ログインの表示をどうしてもさせたいのでcurrent_sign_in_at.strftimeを使いたいのですが、どのようにすればよろしいでしょうか。ログは以下に載せておきます。

#####heroku logs コマンド実行後のログ
イメージ説明

#####herokuにデプロイ後のログ
イメージ説明
イメージ説明
![引用テキスト]
イメージ説明

該当のソースコード

rails

1【エラーが出るページ】 2 3<% @users.each do |user|%> 4 <div class="hidden wid list1-1"> 5 <% if user.grade == 1 && user.class_number == 1%> 6 <%= user.student_number%>番 7 <%=link_to new_user_diary_path(user) do %> 8 <span class="user-name"><%= user.name%></span> 9 <% end %> 10 <% @login = user.current_sign_in_at.strftime('%m月%d日 %H:%M') if user && user.created_at%> 11 <%if @login < Date.current.ago(6.days || 7.days || 8.days)%> 12 <span class="login-day">5日間以上</span> 13 <%elsif @login < Date.current.ago(5.days)%> 14 <span class="login-day">5日前</span> 15 <%elsif @login < Date.current.ago(4.days)%> 16 <span class="login-day">4日前</span> 17 <%elsif @login < Date.current.ago(3.days)%> 18 <span class="login-day">3日前</span> 19 <%elsif @login < Date.current.ago(2.days)%> 20 <span class="login-day">2日前</span> 21 <%elsif @login < Date.current.ago(1.days)%> 22 <span class="login-day">1日前</span> 23 <%elsif @login = Date.today%> 24 <span class="login-day-today"></span> 25 <%end%> 26 <% end %> 27 </div> 28 <% end %>

user.rbにtrackableは追加しています。

class User < ApplicationRecord devise :database_authenticatable, :registerable, :trackable, :recoverable, :rememberable, :validatable 省略 end

usersのマイグレーションファイルでtrackableをコメントアウト解除しています。

class DeviseCreateUsers < ActiveRecord::Migration[6.0] def change create_table :users do |t| ## Database authenticatable t.string :name, null: false t.string :genre, null: false t.integer :grade, null: false t.integer :class_number, null: false t.integer :student_number, null: false t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: " 省略 # Trackable t.integer :sign_in_count, default: 0, null: false t.datetime :current_sign_in_at t.datetime :last_sign_in_at t.string :current_sign_in_ip t.string :last_sign_in_ip

試したこと

heroku run rails db:migrate

補足情報(FW/ツールのバージョンなど)

Rails 6.0

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

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

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

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

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

guest

回答1

0

ベストアンサー

まだ一度もloginしていないUserがあるのではないですか?
とすると
<% @login = user.current_sign_in_at.strftime('%m月%d日 %H:%M') if user && user.created_at%>
のところ
<% @login = user.current_sign_in_at.strftime('%m月%d日 %H:%M') if ser.current_sign_in_at%>
でしょう。
userインスタンスがあるということは必ずcreated_atがありますから、そのチェックは意味無いです。
また
@users.each do |user| の @users はDBからの検索でしょうから、nilがはいっては居ないでしょうから user のチェックも意味無いです

投稿2021/01/10 03:13

winterboum

総合スコア23567

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

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

moto12

2021/01/10 13:11

仰る通りでした。あれば表示させて、無ければ表示させないというだけの問題ですね。大変助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問