2011-07-03 3 views
13

तो मैं तो जैसे कार्य कर कोशिश कर रहा हूँ:rails3 में Datetime created_at करने के लिए एक तिथि की तुलना

today = Date.today - 1 
todaysReport = Report.where(:created_at => today).find_by_user_id(user.id) 

समस्या created_at, एक datetime है तो यह किसी भी matches..Any सुझाव नहीं मिलेगा है ?

yesterday = Time.now - 1.day 
user = User.find(user_id) 

todaysReport = user.reports.where(["created_at >= ? AND created_at <= ?", yesterday.beginning_of_day, yesterday.end_of_day]) 
+0

Heroku – Elliot

+1

पर postgres 'Date.today - 1' करने का मूल्यांकन करेंगे * कल *। या तो '-1' को हटाएं या "आज" से "कल" ​​ –

उत्तर

20

आप शायद कुछ इस तरह करना चाहते हैं?

Report.where(:created_at => today.to_datetime).find_by_user_id(user.id) 

असल में आश्चर्यचकित एआर आपके लिए यह संभाल नहीं करता है।

+0

के तीन उदाहरणों को बदलें, यह एक समाधान है लेकिन खराब है ... –

+0

मैंने अपना जवाब अपडेट कर दिया है। – Dex

+0

हम्म ... बेहतर :) –

-4

आप #to_datetime उपयोग करने की कोशिश है, जो रेल Date और Time वर्गों के लिए जोड़ता है:

+0

क्या वह उस समय से मेल नहीं खा रहा होगा जब मैं केवल दिन से मेल खाता हूं? – Elliot

+0

इसके साथ एकमात्र समस्या यह है कि वह शायद वास्तव में एक सीमा चाहता है, यही कारण है कि यह काम नहीं करता है। एआर को एक त्रुटि उत्पन्न नहीं करनी चाहिए क्योंकि उसके पास अब है। – Dex

+0

आह, हाँ, मुझे समस्या दिखाई देती है। – d11wtq

5

आपको एक आधी रात से अगले तक की सीमा के साथ तुलना करने की आवश्यकता है। इसके अलावा, यह उच्च लचीलापन के लिए अपनी खुद की कक्षा विधि बनाने के लिए एक अच्छा उम्मीदवार है।

class Report 
    # All reports created on the specified Date 
    def self.created_on(date) 
    where(['created_at >= ? AND created_at < ?', date, date + 1]) 
    end 
end 

# Find all reports created yesterday by our user 
Report.created_on(Date.today - 1).where(:user_id => user.id) 
+0

मुझे यह पसंद है! मुझे date_of_day और end_of_day को तारीख var में जोड़ना चाहिए, हालांकि सही है? – Elliot

+0

@ एलियट: कोई ज़रूरत नहीं है। तारीखों को पीछे के समय के साथ मध्यरात्रि में सेट के साथ बदल दिया जाएगा। –

1

यदि टाइम कॉन्फ़िगरेशन में निर्दिष्ट समय क्षेत्र भी टाइमविथज़ोन हो सकता है। डेट टू डेट करने के लिए आपको दिनांक.today.to_time.in_time_zone की तरह करना होगा।

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