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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

1680閲覧

undefined method `strftime' for nil:NilClassの解決方法が分かりません

ayatakaa_chan

総合スコア1

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2021/09/06 08:36

前提・実現したいこと

SimpleCalendarを利用したメモ付きカレンダーを作ろうとしています。
下記の記事を参考にして作成を進めています。

【初心者向け】Railsでメモ付きカレンダーを作ってみよう。SimpleCalendar

上記に書かれていることをそっくりコピーしたあと、エラーが出て困っています。

発生している問題・エラーメッセージ

NoMethodError in Blogs#index
Showing /home/ec2-user/environment/calendar/app/views/blogs/index.html.erb where line #22 raised:

undefined method `strftime' for nil:NilClass

Extracted source (around line #22): <tr> <td><%= link_to blog.title , blog %></td> <td><%= blog.start_time.strftime("%m-%d") %></td> </tr> <% end %> </tbody>

該当のソースコード

index.html.erb

1<p id="notice"><%= notice %></p> 2 3<div class="toppage"> 4<h1 class="top">カレンダー</h1> 5<br> 6 7<div class="row"> 8<div class="col-md-4"> 9 <div class="schedule">今後の予定一覧</div> 10<table class="table"> 11 <thead class="thead-light"> 12 <tr> 13 <th>タイトル</th> 14 <th>日程</th> 15 </tr> 16 </thead> 17 18 <tbody> 19 <% @blogs.each do |blog| %> 20 <tr> 21 <td><%= link_to blog.title , blog %></td> 22 <td><%= blog.start_time.strftime("%m-%d") %></td> 23 </tr> 24 <% end %> 25 </tbody> 26</table> 27 28 29 30<%= form_with(model: @blog, local: true) do |form| %> 31 32 <div class="title"> 33 <div class="form-tag">タイトル</div> 34 <%= form.text_field :title %> 35 </div> 36 37 38 <div class="content"> 39 <div class="form-tag">内容</div> 40 <%= form.text_field :content %> 41 </div> 42 43 <div class="time"> 44 <div class="form-tag">時間</div> 45 <%= form.datetime_select :start_time %> 46 </div> 47 48 <div class="submit"> 49 <%= form.submit %> 50 </div> 51<% end %> 52</div> 53 54<br> 55 56 57<br> 58<div class="col-md-8"> 59<%= month_calendar events: @blogs do |date, blogs| %> 60 <%= date.day %> 61 62 <% blogs.each do |blog| %> 63 <div> 64 <%= link_to blog.title, blog %> 65 </div> 66 <% end %> 67<% end %> 68</div> 69</div> 70</div>

試したこと

同じような質問をしている記事を読みました。

https://teratail.com/questions/293197
https://teratail.com/questions/293896
https://teratail.com/questions/315046

しかし私の理解力不足もあって、自分のケースに適用する方法がわかりませんでした。

経験のあるエンジニアさん、ぜひお助けいただけたら幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

@blogs の中に start_time が nil のものが混じってます。
おそらく、start_time を選択せず保存したのでしょう。

(A) start_time の nil を許容する場合

start_time が nil のとき strftime を呼ばないようにします

erb

1<td><%= blog.start_time.strftime("%m-%d") if blog.start_time %></td>
(B) start_time の nil を許容しない場合

コンソールに bin/rails c と打ちます。
Blog.where("start_time is null").destroy_all
として start_time が nil の blog を全部削除します。
(消したデータは元に戻せないので注意してください)

validation を設定して今後 start_time が保存できないようにします。

erb

1class Blog 2 validates :start_time, presence: true

投稿2021/09/06 08:53

neko_daisuki

総合スコア2090

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

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

ayatakaa_chan

2021/09/06 11:03

ありがとうございます!解決しました。 nil回避の方法について理解が足りていなかったようなので、勉強し直します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問