2012-11-19 22 views
9

Bir Rails görünümünde tarihleri ​​biçimlendirmeye çalışıyorum. tarih nil iseRaylar Biçim Nil Tarih

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

Bu işe yaramazsa:

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

iyi "Raylar" çözüm nedir?

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

cevap

11

Sadece bir koruma sistemi eklemek hiçbir zaman sıfır tarihin yok. Oluşturmaya çalıştığınız ürüne bağlıdır, ancak birçok durumda, görüntülenecek bir tarihin olması mantıklı olmaz. Eğer ürününüz için tarihler makul ise, bu işe yaramaz. sizin için bunu yapmak için bir yardımcı işlevi yazın)

<%= 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 

Sonra bütün her yerde yapmak zorunda

2) nil gizlemek için her yerde görünümü kodunu yazın Bu tarihte tedavi görmek istediğinizde:

<%= display_date(order.ship_date) %> 
+0

Benim durumumda, bir 'text_field' kullanıyorum ve arıza güvenli çalışıyor. Teşekkürler! Sonuç: '<% = f.text_field: due_date,: value => (l (order.due_date) eğer order.due_date.present?)%>' –

9

üç seçenek: Eğer bu durumda bir şey görüntülemek istiyorsanız

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

nil var:

1) emin olun nesne nil ise

+0

Yardımcı yöntemden çok hoşlanıyorum, özellikle daha kısa bir sürü randevunuz var. – counterbeing