2012-11-19 12 views
9

Sto provando a formattare le date in una vista Rails.Rails Nil Date

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

Questo non funziona se la data è pari a zero:

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

Qual è la soluzione migliore "Rails"?

risposta

11

Basta aggiungere un fail-safe se l'oggetto è pari a zero:

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

Se si desidera visualizzare qualcosa nel caso in cui è pari a zero:

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

Nel mio caso, io sto usando un 'text_field' e il fail-safe funziona bene. Grazie! Il risultato è: '<% = f.text_field: due_data,: valore => (l (order.due_date) se order.due_date.present?)%>' –

9

tre opzioni:

1) Assicurarsi non hai mai una data nil. Dipende dal prodotto che stai cercando di creare, ma in molti casi non avrebbe senso visualizzare una data nil. Se, per il tuo prodotto, le date nul sono ragionevoli, questo non funzionerà.

2) codice della vista in tutto il mondo per nascondere il nil:

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

3) Scrivere una funzione di supporto per fare questo per voi:

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

Poi tutto quello che dovete fare in ogni luogo si desidera che questo trattamento è data da dire:

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

Mi piace molto il metodo helper, è molto più breve, specialmente quando hai un'applicazione con molte date. – counterbeing

Problemi correlati