जब मैं आज बनाए गए सभी रिकॉर्ड प्राप्त करना चाहता हूं, तो मुझे सशर्त विवरण कैसे लिखना चाहिए?
जब मैं आज बनाए गए सभी रिकॉर्ड प्राप्त करना चाहता हूं, तो मुझे सशर्त विवरण कैसे लिखना चाहिए?
जवाबों:
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
पुनश्च: इस उत्तर को संशोधित किया गया है क्योंकि हरीश शेट्टी का उत्तर मेरे मुकाबले बेहतर था। जैसा कि मेरा जवाब एक स्वीकार किया जाता है। मैंने सामुदायिक समर्थन के लिए इस उत्तर को अपडेट किया है
Post.where("created_at >= ?", Time.zone.now.beginning_of_day)बहुत चालाक है, मैं समर्थन करेंगे Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)। एक तरह से करने का एक बिंदु है जिससे आप समय में हेरफेर कर सकते हैं। उदाहरण के लिए, यदि आप परीक्षण कर रहे हैं, तो आप शायद समय में हेरफेर करेंगे और फिर पहला विकल्प काम नहीं करेगा। आप उस तरह की भविष्य की संभावित विफलता से बचना चाहते हैं जो शायद कुछ डिबग समय लेगी।
मुझे पता है कि इस सवाल का एक स्वीकृत जवाब है। तालिका में आकार बढ़ने पर स्वीकृत उत्तर में सुझाए गए समाधान प्रदर्शन की समस्या पैदा कर सकते हैं।
आमतौर पर, यदि आप created_atस्तंभ पर आधारित लुकअप करते हैं, तो अपनी माइग्रेशन फ़ाइल में तालिका पर एक इंडेक्स जोड़ें।
add_index :posts, :created_at
अब, आज बनाए गए रिकॉर्ड देखने के लिए:
रेल 3/4
Post.where("created_at >= ?", Time.zone.now.beginning_of_day)
किसी विशिष्ट दिन पर बनाए गए पोस्ट देखने के लिए।
Post.where(:created_at => (date.beginning_of_day..date.end_of_day))
--------- या -------------
अपने मॉडल में एक स्थिर विधि जोड़ें
class Post < ActiveRecord::Base
def self.today
where("created_at >= ?", Time.zone.now.beginning_of_day)
end
end
Post.today #returns posts today
रेलें २
Post.all(:conditions => ["created_at >= ?", Time.zone.now.beginning_of_day])
--------- या -------------
अपने मॉडल में एक name_scope जोड़ें
class Post < ActiveRecord::Base
named_scope :today, lambda {
{
:conditions => ["created_at >= ?", Time.zone.now.beginning_of_day]
}
}
end
Post.today #returns posts today
scopeइस पोस्ट में उदाहरण केवल रेल 3 के लिए है, क्योंकि ऐसा लगता है कि यह रेल्स 2 शीर्षक के तहत है। रेल 2 में, आपको इसके named_scopeबजाय उपयोग करने की आवश्यकता होगी scope। इसके अलावा, रेल 3 में, आप समान रूप से एक वर्ग विधि का उपयोग कर सकते हैं def self.today where("created_at >= ?", Time.now.beginning_of_day) end जो इस मामले में एक गुंजाइश का उपयोग करने की तुलना में संभवतः क्लीनर है, क्योंकि यह आपको लैम्ब्डा को त्यागने की अनुमति देता है।
मोहित जैन का जवाब Rails3 के लिए अनुकूलित
Model.where "DATE(created_at) = DATE(?)", Time.now
रेल 5.1 में एक all_dayसहायक है जो यहां उपयोगी है।
Post.where(created_at: Date.today.all_day)
या
Post.where(created_at: Date.parse("YYYY-MM-DD").all_day)
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
इस "नेमकोप" की विशेषता है table_name।
model.rb
scope :posted_today, -> { posted_between_period(Time.now.midnight, Time.now.end_of_day) }
posts_controller.rb
Post.posted_today
between_periodदिलचस्प लग रहा है। मुझे इसके लिए कोई दस्तावेज नहीं मिला। क्या आप कुछ लिंक प्रदान कर सकते हैं? रेल तुलना के लिए कॉलम कैसे चुनती है?
किसी कारण से, इस पोस्ट में अन्य समाधानों में से कोई भी और न ही स्टैकऑवरफ्लो पर अन्य लोगों ने मेरे लिए काम किया (रेल 4.2.4 और रूबी 2.2.3p173 का उपयोग करके)। यह एकमात्र प्रश्न है जो मुझे अपने पोस्टग्रैज डेटाबेस के साथ काम करने के लिए मिल सकता है:
Post.where("created_at >= TIMESTAMP 'now'")
आज से बनाए गए रिकॉर्ड को क्वेरी करने के लिए
स्कोल के साथ गुंजाइश का उपयोग करें
class Post < ActiveRecord::Base
scope :create_from_today, -> {
where(arel_table[:created_at].gteq(Time.zone.now.beginning_of_day))
}
end
तब हम इसका उपयोग कर सकते हैं
today_posts = Post.created_from_today
where('created_at >= now()')केवल उन्हीं वस्तुओं को खोजेगा जहां भविष्य में create_at था।
.lteq(Time.zone.now.end_of_day))।
आज बनाए गए रिकॉर्ड प्राप्त करने के लिए रेल्स 4.2.3 में, mysql का उपयोग करके निम्नलिखित का उपयोग करें।
@usergoals = Goal.where ("userid =: userid and Date (create_at) =: date", {userid: params [: id], date: Date.today})
यहाँ मैं कई शर्तों का उपयोग कर रहा हूँ यदि आप चाहते हैं कि आप इसे एकल स्थिति के लिए संपादित कर सकें।