2012-11-19 15 views
9

Próbuję sformatować daty w widoku Rails.Format szyny Data zerowa

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

ten nie działa, jeśli data ta jest zerowa:

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

Co jest najlepsze rozwiązanie "Rails"?

Odpowiedz

11

Wystarczy dodać failsafe jeśli obiekt jest zerowa:

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

Jeśli chcesz zobaczyć coś w przypadku jest to nil:

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

W moim przypadku używam 'text_field', a funkcja failsafe działa poprawnie. Dzięki! Wynikiem jest: '<% = f.text_field: due_date,: value => (l (order.due_date) if order.due_date.present?)%>' –

9

trzy opcje:

1) Upewnij się, nigdy nie masz daty zerowej. Zależy od produktu, który próbujesz utworzyć, ale w wielu przypadkach nie ma sensu wyświetlanie daty zerowej. Jeśli dla twojego produktu daty zerowe są uzasadnione, to nie zadziała.

2) Napisz do widoku kodu wszędzie ukryć nil:

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

3) Napisz funkcję pomocnika to zrobić dla Ciebie:

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

Następnie wszystko co musisz zrobić, w każdym miejscu chcesz, aby ta terapia daty była następująca:

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

Bardzo podoba mi się metoda pomocnika, jest znacznie krótsza, szczególnie gdy masz aplikację z wieloma datami. – counterbeing

Powiązane problemy