使用strftime的未定义方法

时间:2018-07-11 16:02:16

标签: ruby-on-rails ruby strftime

我是新手,偶然发现了一个问题。

我正在尝试构建此笔记/会议应用程序,并且在使用strftime时遇到nil:NilClass 错误的未定义方法'strftime'。我正在使用simple_calendar。

这是错误来源:

<div class="form-inputs">
  <%= f.input :name %>
  <%= meeting.starts_at.strftime("%B %e, %Y,%l:%M %p") %>
</div>

在另一面,例如,在以下位置调用strftime方法即可:

<li id="m-time"><%= meeting.created_at.strftime("%m/%d/%y") %></li>

帮助?

2 个答案:

答案 0 :(得分:0)

问题是meeting.starts_atnil。您进行其他通话的原因是,meeting.create_at是一个日期,它响应strftime消息,而nil是一个日期。

如何防止meeting.starts_at成为nil取决于meeting值的来源。也许您想添加更好的验证,以便没有starts_at日期就无法创建会议。或者,如果没有开始日期有效,则应在尝试访问<% if meeting.starts_at %>的部分周围添加一个<% end %> meeting.starts_at块,以便在没有开始日期的情况下不呈现任何内容。如果没有会议开始日期,您还可以添加一个<% else %>块以呈现不同的内容。

答案 1 :(得分:0)

问题:meeting.starts_atnil。您无法在nil上调用该方法。

解决方案:

  1. 确保在会议模型中您具有返回非nil值的方法或名称为starts_at的属性,并带有验证presence: true以确保非- nil值未存储在其中。

  2. 使用meeting.starts_at&.strftime("%B %e, %Y,%l:%M %p")来避免崩溃,以防万一starts_atnil