2012-05-28 16 views
7

के बीच रेल क्वेरी मेरे पास एक रेल ऐप है जिसमें Checkin मॉडल है। मैं उन सभी रिकॉर्ड्स को ढूंढना चाहता हूं जो वर्तमान दिन के लिए एक विशिष्ट समय सीमा के भीतर हैं। 12PM और 4:30 अपराह्न के बीच बनाए गए सभी रिकॉर्ड प्राप्त करने के लिए मैं where कैसे लिखूं?दो बार

+0

आप किस डेटाबेस का उपयोग कर रहे हैं? दिन का समय प्राप्त करने के लिए कार्य अलग-अलग होंगे। यदि आप समय के साथ दिन के घंटे/मिनट को स्टोर करेंगे तो यह सबसे आसान होगा। –

+0

मैं postgresql का उपयोग कर रहा हूँ। मैं मानक 'बनाया_at' टाइमस्टैम्प कॉलम का उपयोग कर रहा हूं जो रेल प्रदान करता है –

उत्तर

36

@ x1a4 का उत्तर आपके लिए अच्छा होना चाहिए लेकिन आप इसे एक श्रेणी का उपयोग करके अधिक पढ़ने योग्य और छोटे तरीके से कर सकते हैं।

Chekin.where(created_at: Time.parse("12pm")..Time.parse("4:30pm")) 

यह की तरह कुछ उत्पन्न करनी चाहिए:

SELECT "checkins".* 
FROM "checkins" 
WHERE ("checkins"."created_at" BETWEEN '2012-05-28 12:00:00.000000' AND '2012-05-28 16:30:00.000000') 

आप किसी भी अन्य तरीके से एक समय बनाने के लिए साथ Time.parse("12pm") बदल सकते हैं।

8

यह लग रहा है कि यह काम करेगा की तरह, UTC समय क्षेत्र मानते हुए:

Record.where('created_at > ? AND created_at < ?', Date.today + 12.hours, Date.today + 16.5.hours) 

या एक BETWEEN साथ:

Record.where('created_at BETWEEN ? AND ?', Date.today + 12.hours, Date.today + 16.5.hours) 

BETWEEN या नहीं रेंज में दूसरा मान शामिल हो सकते हैं कर सकते हैं। Postgres includes it

0

आप तिथियों के बीच रिकॉर्ड को खोजने के लिए मणि नीचे इस्तेमाल कर सकते हैं,

काफी का उपयोग करने के लिए आसान और अधिक स्पष्ट [स्टार तक] यह gem [1]। मैं इस मणि का उपयोग कर रहा हूं और एपीआई अधिक स्पष्ट है और दस्तावेज़ीकरण भी अच्छी तरह से समझाया गया है।

Post.between_times(
Time.zone.now - 3.hours, # all posts in last 3 hours 
Time.zone.now 
) 

यहाँ आप हमारे क्षेत्र गुजारें सकता भी Post.by_month("January", field: :updated_at)

कृपया दस्तावेज़ देखें और यह प्रयास करें।

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