【问题标题】:undefined method whe using strftime使用 strftime 的未定义方法
【发布时间】:2018-12-19 18:07:12
【问题描述】:

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

我正在尝试构建此笔记/会议应用程序,但在使用 strftime 时出现 undefined method `strftime' for nil:NilClass 错误。我正在使用 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>

帮助?

【问题讨论】:

  • 大概,meeting.starts_at 是零。您可能希望签入 nil 以防止在 nil 对象上调用 strftime。

标签: ruby-on-rails ruby strftime


【解决方案1】:

问题是meeting.starts_at 是nil。您的另一个电话有效,因为meeting.create_at 是一个日期,它响应strftime 消息,而不是nil,它不响应。

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

【讨论】:

    【解决方案2】:

    问题:meeting.starts_at 是 nil。您不能在nil 上调用该方法。

    解决方案:

    1. 确保在 Meeting 模型中具有返回非 nil 值的方法或名称为 starts_at 的属性,并带有验证 presence: true 以确保不会出现非 nil 值保存在里面。

    2. 如果starts_at 是nil,则使用meeting.starts_at&amp;.strftime("%B %e, %Y,%l:%M %p") 避免崩溃

    【讨论】:

      猜你喜欢
      • 2012-10-08
      • 2013-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      相关资源
      最近更新 更多