2010-01-28 8 views
5

मैं एक क्वेरी बनाने की कोशिश कर रहा हूं जो कॉलम 'last_login_at' पर आधारित हालिया प्रविष्टियों की खोज करेगा। इस समय क्षेत्र (अर्थात Time.zone.now) के साथ एक datetime क्षेत्र जब मैं निष्पादितडेटाटाइम रेंज (अंतिम 24, 48, आदि ... घंटे) द्वारा रेल क्वेरी पर रूबी

User.find(:all, :conditions => ["last_login_at < ?", 24.hours.ago]) 

मैं कुछ भी नहीं मिल रहा है।

वैकल्पिक रूप से मैं Time.zone.today - 1.day रूप Time.zone.today और कल के रूप में आज को परिभाषित करने और

User.find(:all, :conditions => ["last_login_at between ? and ?", today, yesterday]) 

चलाने के लिए और यह अभी भी रिटर्न 0 परिणाम कर सकते हैं। मुझे पता है कि कुछ प्रविष्टियां हैं जो इस श्रेणी में आती हैं।

उत्तर

11

सुनिश्चित करें कि आपने डेटाबेस के भीतर दर्ज किए गए टाइमज़ोन और आपके रेल ऐप आउटपुटिंग बराबर हैं। यह कभी-कभी किसी समस्या का कारण बन सकता है। तुम क्या करने की इजाजत दी

class User < ActiveRecord::Base 
    named_scope :last_loggedin_before, lambda { |time_ago| { :conditions => ['last_login_at < ?', time_ago] } } 
    named_scope :last_loggedin_within, lambda { |time_ago| { :conditions => ['last_login_at > ?', time_ago] } } 
end 

: अन्यथा इस नाम गुंजाइश कोशिश

User.last_loggedin_before 24.hours.ago 

या

User.last_loggedin_within 24.hours.ago 
+0

ऐसा लगता है कि टाइमज़ोन की तुलना में पीएसटी -08: 00 दोनों हैं, इसलिए मैं मीटर अभी भी अटक गया है ... नामित क्षेत्रों को बहुत अच्छा काम करना चाहिए! धन्यवाद – Mike

+2

यह बहुत अच्छा काम करता है, धन्यवाद। एक नोट - नाम_स्कोप बदल गया है 'स्कोप' (मैं रेल 3.2.11 पर हूं)। – Blake

17

पुराना सवाल, लेकिन यहाँ नए वाक्य रचना है:

User.where(last_login_at: 3.days.ago..DateTime.now) 
संबंधित मुद्दे