2012-11-19 32 views
9

Tôi đang cố định dạng ngày tháng trong chế độ xem Đường ray.Định dạng đường ray Nil Date

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

này không hoạt động nếu ngày là con số không:

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

gì là tốt nhất "Rails" giải pháp?

Trả lời

11

Chỉ cần thêm một failsafe nếu đối tượng là con số không:

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

Nếu bạn muốn hiển thị một cái gì đó trong trường hợp đó là con số không:

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

Trong trường hợp của tôi, tôi đang sử dụng 'text_field' và failsafe hoạt động tốt. Cảm ơn! Kết quả là: '<% = f.text_field: due_date,: value => (l (order.due_date) nếu order.due_date.present?)%>' –

9

Ba lựa chọn:

1) Chắc chắn bạn không bao giờ có một ngày nil. Tùy thuộc vào sản phẩm bạn đang cố gắng tạo, nhưng trong nhiều trường hợp, sẽ không có ý nghĩa gì khi hiển thị ngày nil. Nếu, đối với sản phẩm của bạn, ngày nil là hợp lý, điều này sẽ không hoạt động.

2) Viết chế độ code ở khắp mọi nơi để ẩn các con số không:

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

3) Viết một hàm helper để làm điều này cho bạn:

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

Sau đó, tất cả các bạn phải làm ở mỗi nơi bạn muốn điều trị ngày này là để nói:

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

Tôi thực sự thích phương thức trợ giúp, nó ngắn hơn nhiều, đặc biệt là khi bạn có một ứng dụng với rất nhiều ngày. – counterbeing

Các vấn đề liên quan