2012-05-02 12 views
5

तो मेरे पास साप्ताहिक कैलेंडर दृश्य है और मेरे पास प्रारंभ तिथि के लिए/वर्ष /: माह/दिन स्वीकार करने के लिए एक मार्ग स्थापित है।तारीखों के साथ रेल मार्ग

match "events/(:year/:month/:day)" => "events#index", 
     :constraints => { :year => /\d{4}/, :month => /\d{2}/, :day => /\d{2}/ }, 
     :as => "events_date" 

मेरे पास इस मार्ग के उपयोग के संबंध में दो प्रश्न हैं।

unless params[:year].nil? || params[:month].nil? || params[:day].nil? 
    start_date = Date.new(params[:year].to_i, params[:month].to_i, params[:day].to_i) 
end 
start_date = start_date.nil? ? Date.today : start_date 

यह मैं के रूप में सुंदर वर्बोज़ और एक तरह से बदसूरत हमलों: सबसे पहले, जब पैरामीटर पार्स करने, यह मैं क्या कर रहा है। क्या कोई बेहतर तरीका है?

और जब (पेजिंग सप्ताह के लिए सप्ताह के लिए) कैलेंडर में एक और सप्ताह के लिए एक लिंक बनाने, मैं की तरह

#assume an date object with the desired start date 
link_to events_date_path(date.strftime('%Y'), date.strftime('%m'), date.strftime('%d')) 

भी तरह का अत्यधिक शब्द और बदसूरत लगता है कौन सा कुछ करने के लिए है। मार्गों में तिथियों के साथ काम करने का सबसे अच्छा तरीका क्या है?

+0

क्या कोई कारण है कि इसे मानव पठनीय होने की आवश्यकता है, और उस प्रारूप में? क्या यह "घटनाओं ((दिनांक:)" के रूप में स्थापित होने के लिए और अधिक समझ में आता है, जहां: दिनांक "2012-05-01" जैसा होता है और आप उस पर वास्तविक समय वस्तु में सीधे कार्रवाई कर सकते हैं? –

+0

नहीं, यह एक पूरी तरह से निजी परियोजना है, यह एक प्रोग्रामिंग अभ्यास है क्योंकि यह एक वास्तविक समस्या है – DVG

+0

मुझे लगता है कि मैं अपना उत्तर वास्तविक उत्तर फ़ील्ड में ले जाऊंगा। ;) –

उत्तर

8

मेरा सुझाव तीन अलग-अलग चर का उपयोग नहीं करना होगा। इस तरह आप अपने नियंत्रक में बहुत अधिक नल जांच और सैनिटी जांच के साथ समाप्त नहीं होते हैं। आप अपने मैच में कुछ इस तरह लग रहे करने के लिए, अपने बाधाओं के साथ अभी भी कुशलता में बदल सकता है:

unless params[:date] 
    start_date = params[:date].strftime("%Y-%m-%d').to_date # assuming you want a Date 
end 

और मैं:

match "events/(:date)" => "events#index", 
     :constraints => { :date => /\d{4}-\d{2}-\d{2}/ }, 
     :as => "events_date" 

इस प्रकार आप कुछ नियंत्रक में एक छोटे से अधिक समझदार के साथ खत्म होगा आम तौर पर, उन प्रकार के कर की 'अगर यह सेट किया गया है' अधिक कुछ इस तरह की जाँच करता है, क्योंकि मैं इसे खोजने के अधिक पठनीय एक सा:

start_date = Date.today unless defined? start_date 

तुम भी उन पिछले दो एक साथ रोल कर सकते हैं:

start_date = defined?(params[:date]) ? params[:date].strftime("%Y-%m-%d').to_date : Date.today 
+0

ध्यान दें कि आप इस वाक्यविन्यास का उपयोग कर सीधे किसी तारीख पर जा सकते हैं: date.strptime (पैराम्स [: दिनांक], '% वाई-% एम-% डी') –

+0

ब्याज की बात, क्या आप भाग में आगे की स्लैश का उपयोग कर सकते हैं अलग-अलग चरों में भागों को तोड़ने के बिना खुद को हीम का? – DVG

+0

मैं सकारात्मक नहीं हूं। मेरा अनुमान हाँ है, लेकिन मैं इसकी अनुशंसा नहीं करता क्योंकि यह कुछ हद तक संदिग्ध है। आपका मार्ग "घटनाओं/(तिथि:)" पढ़ेगा और आपको "ईवेंट/2012/05/01" प्राप्त हो रहा है। मेरे दिमाग में बस थोड़ा गंदा लगता है, क्योंकि आप एक मार्ग में/पर विभाजित होने वाले हैं। –

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