在 nil 对象上使用 strftime - 如何防止错误?

Posted

技术标签:

【中文标题】在 nil 对象上使用 strftime - 如何防止错误?【英文标题】:Using strftime on nil object - how to prevent error? 【发布时间】:2011-12-04 03:12:39 【问题描述】:

我使用 strftime 将原始时间格式化为输入框的文本。通常,当我使用 strftime 时,我会检查对象是否为 nil,以通过使用 unless nil 来防止错误?但是,我似乎不能在这里使用它:

<%= text_field_tag :event_date, @event.event_date.strftime("%m/%d/%Y at %I:%M%p"), :size=>30 %>

我删除了除非,因为它会引发错误。如果 @event.event_date 为 nil,我如何确保此语句有效?

谢谢

【问题讨论】:

【参考方案1】:

一个技巧是使用try

<%= text_field_tag :event_date, @event.event_date.try(:strftime, "%m/%d/%Y at %I:%M%p"), :size=>30 %>

或者只检查是否设置了event_date

<%= text_field_tag :event_date, (@event.event_date && @event.event_date.strftime("%m/%d/%Y at %I:%M%p")), :size=>30 %>

【讨论】:

这也是.blank? 的好候选吗?我最近一直在以某些形式工作,它派上用场了。 (因为它会检查空字符串和 nil。) 或者如果你想使用 Rails 日期格式:@event.event_date.try(:to_formatted_s, :long)

以上是关于在 nil 对象上使用 strftime - 如何防止错误?的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中,我如何避免选项和 nil 对象引用?

如何获得这种类型的时间格式“2014 年 8 月 13 日,下午 4:04”使用strftime?

nib 中的 UIView 在 iPad 上是 nil,在 iPhone 上不是 nil

Swift iOS Firebase - 如果FirebaseAuth.FIRUser对象不是nil,它上面的.email怎么可能返回nil?

在有空值的日期上使用 lambda 和 strftime (Pandas)

Object-C在Nil上调用方法