12

我正在尝试在 Rails 视图中格式化日期。

<td><%= l order.ship_date, :format => :long %></td>

如果日期为零,这不起作用:

Object must be a Date, DateTime or Time object. nil given.

什么是最好的“Rails”解决方案?

4

2 回答 2

11

如果对象为零,只需添加故障保护:

<td><%= l(order.ship_date, :format => :long) if order.ship_date %></td>

如果你想在它为 nil 的情况下显示一些东西:

<td><%= order.ship_date ? l(order.ship_date, :format => :long) : "Some text" %></td>
于 2012-11-19T12:19:27.367 回答
10

三个选项:

1)确保你永远不会有一个零日期。取决于您尝试创建的产品,但在许多情况下,显示零日期是没有意义的。如果对于您的产品,nil 日期是合理的,那么这将不起作用。

2)到处写视图代码来隐藏nil:

<%= order.ship_date ? l(order.ship_date, :format => :long) : 'Date unavailable' %>

3)编写一个辅助函数来为您执行此操作:

def display_date(date, message='Date unavailable')
  date ? l(date, :format => :long) : message
end

然后,在您想要进行这种约会处理的每个地方,您所要做的就是说:

<%= display_date(order.ship_date) %>
于 2012-11-19T12:54:27.577 回答