2012-11-19 82 views
9

我想在Rails視圖中格式化日期。Rails格式無日期

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

如果日期是零這不起作用:

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

什麼是最好的 「導軌」 的解決方案?

回答

11

只需添加一個故障安全如果對象是零:

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

如果你想在情況下顯示的東西是零:

<td><%= order.ship_date ? l(order.ship_date, :format => :long) : "Some text" %></td> 
+0

在我的情況,我使用'text_field'和故障安全工作正常。謝謝!結果是:'<%= f.text_field:due_date,:value =>(l(order.due_date)if order.due_date.present?)%>' –

9

三個選項:

1)確保你永遠不會有一個無約會。取決於您嘗試創建的產品,但在很多情況下,顯示無效日期是沒有意義的。如果對於您的產品,無日期是合理的,這是行不通的。

2)無處不在寫視圖代碼隱藏零:

<%= 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) %> 
+0

我真的很喜歡幫手方法,它更短,尤其是當你有一個有很多日期的應用程序。 – counterbeing