2012-11-19 24 views
9

मैं रेलवे दृश्य में तिथियों को प्रारूपित करने का प्रयास कर रहा हूं।रेल प्रारूप प्रारूप दिनांक

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

यह अगर तारीख नहीं के बराबर है काम नहीं करता:

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

क्या सबसे अच्छा "रेल" समाधान है?

उत्तर

11

बस एक फेलसेफ जोड़ने अगर वस्तु नहीं के बराबर है:

<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) अगर order.due_date.present?)%>' –

9

तीन विकल्प:

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

आप मामले में कुछ प्रदर्शित करना चाहते हैं यदि यह नहीं के बराबर है

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

संबंधित मुद्दे