Rails格式为无日期

ben*_*t_w 10 datetime ruby-on-rails

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

<td><%= l order.ship_date, :format => :long %></td>
Run Code Online (Sandbox Code Playgroud)

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

Object must be a Date, DateTime or Time object. nil given.
Run Code Online (Sandbox Code Playgroud)

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

Rod*_*tro 11

如果对象为零,只需添加故障安全:

<td><%= l(order.ship_date, :format => :long) if order.ship_date %></td>
Run Code Online (Sandbox Code Playgroud)

如果你想显示一些东西,如果它是零:

<td><%= order.ship_date ? l(order.ship_date, :format => :long) : "Some text" %></td>
Run Code Online (Sandbox Code Playgroud)


hon*_*nic 9

三种选择:

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

2)在任何地方编写视图代码以隐藏nil:

<%= order.ship_date ? l(order.ship_date, :format => :long) : 'Date unavailable' %>
Run Code Online (Sandbox Code Playgroud)

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

def display_date(date, message='Date unavailable')
  date ? l(date, :format => :long) : message
end
Run Code Online (Sandbox Code Playgroud)

那么你想要在这个日期治疗的每个地方所要做的就是说:

<%= display_date(order.ship_date) %>
Run Code Online (Sandbox Code Playgroud)