2009-08-10 8 views
32

रेल्स माइस्क्ल में सही ढंग से स्वरूपित डेटाटाइम्स को स्वचालित रूप से डालने के साथ अच्छा रहा है, बिना मुझे यह विचार देने की ज़रूरत है।रूबी डेटाटाइम mysql तुलना के लिए उपयुक्त

हालांकि, सत्यापन करने के लिए, मुझे यह जांचना होगा कि एक संग्रहीत mysql डेटाटाइम मान (यानी 2008-07-02 18:00:00) "अब" से अधिक या उससे कम है या नहीं। मैं DateTime.now या Time.now पर कॉल कर सकता हूं लेकिन मैं इसे MySQL पसंद प्रारूप में कैसे परिवर्तित कर सकता हूं?

धन्यवाद

उत्तर

83

आप to_s(:db) का प्रयोग कर एक डेटाबेस अनुकूल प्रारूप में परिवर्तित कर सकते हैं।

Time.now.to_s(:db) 

हालांकि, सावधान रहें यदि आपके पास रेल में निर्दिष्ट टाइमज़ोन है क्योंकि समय डेटाबेस में यूटीसी में संग्रहीत किया जाएगा। आपको उचित तुलना करने के लिए निर्दिष्ट करना होगा।

Time.now.utc.to_s(:db) 

तुम भी बजाय रूबी में वर्तमान समय पैदा करने में MySQL में NOW() फ़ंक्शन का उपयोग कर सकते हैं।

+15

धन्यवाद। railscasts लड़के अपने सवालों का जवाब देने के लिए यह कमाल :) – user94154

+1

यह वास्तव में रेलों में एक विधि होना चाहिए! – Hopstream

+0

100 धन्यवाद। इस जवाब ने मुझे अभी() अस्तित्व के बारे में याद दिलाया। ActiveRecord यकीन है कि मुझे खराब कर दिया है। मैं समय बीत रहा हूं। अब से मैं शायद एसक्यूएल को शायद ही स्पर्श करता हूं। हाथ से tweaking एसक्यूएल (कम से कम मेरे लिए) के दिन गए हैं। – Swartz

5

आपको इसकी आवश्यकता नहीं है। रेल आप के लिए कार्य करने दें: अपने मॉडल Widget है

यदि यह सभी विजेट है कि अंतिम दिन में बनाया गया है मिलेगा:

Thing.find(:all, :condition => ["created_at > ?", Time.now - 1.day]) 

रेल स्वचालित रूप से सही प्रारूप में टाइमस्टैम्प परिवर्तित कर देंगे।

+0

प्रतिक्रिया के लिए धन्यवाद लेकिन यह मेरे उपयोग के मामले में फिट नहीं है। मेरे पास पहले ही डीबी से मेरा ऑब्जेक्ट पुनर्प्राप्त हुआ है। इसे पुनर्प्राप्त करने के बाद, मुझे उस पर समय-आधारित सत्यापन चलाने की आवश्यकता है ताकि चेक रूबी कोड में किया जाना चाहिए, न कि क्वेरी में। फिर भी धन्यवाद। – user94154

+0

मेरे पास एक अलग परिदृश्य था, और यह पूरी तरह से काम किया। धन्यवाद। – aronchick

+0

रेल 4+ में बस 'Thing.where (' create_at>? ', 6.months.ago) का उपयोग करें। –

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