2011-11-19 12 views
11

किसी को रेलवे 3.1 में इस महीने बनाए गए रिकॉर्ड खोजने के लिए सबसे अच्छी क्वेरी पता है?रेलवे 3.1 में इस महीने बनाए गए रिकॉर्ड कैसे खोजें?

+0

के रूप में एक प्रतिदेय वस्तु ऐसी उपयोग करना आवश्यक है आप अधिक विवरण जोड़ना चाहिए ... मॉडल परिभाषा – lucapette

उत्तर

34
class Model 
    scope :this_month, -> { where(created_at: Time.now.beginning_of_month..Time.now.end_of_month) } 
end 

आप इस तरह यह कॉल कर सकते हैं: एक ही मॉडल के लिए

Model.this_month 
+0

साफ और स्वच्छ की तरह, +1 – apneadiving

+0

इस काम SQLite करता है? मैं इसे स्क्लाइट में चलाने की कोशिश कर रहा था और यह ActiveRecord :: स्टेटमेंट इन्वालिड: SQLite3 :: SQLException: "<": वाक्यविन्यास त्रुटि: "ऑर्डर" चुनें। * "ऑर्डर" से * कहां से (बनाया_at> '2011-11- 01 04: 00: 00.000000 'और <' 2011-12-01 04: 59: 59.9 99 999 ') \t /Users/mrchess/.rvm/gems/ruby-1.9.2-p290/gems/sqlite3-1.3.4 से /lib/sqlite3/database.rb:91: 'प्रारंभ करें' – kidcapital

+2

हम्म, 'BETWEEN'' का प्रयास करें: '"बनाया गया है? और?" ' –

3

पर निर्भर करता है, तो अपने सभी मॉडलों के सभी रिकॉर्ड के लिए या एक विशिष्ट मॉडल आदि पर देख ...

आप कर सकता है:

User.where('created_at >= ? and created_at <= ?', Time.now.beginning_of_month, Time.now.end_of_month) 
21

मैं पसंद एसक्यूएल कम:

Model.where(:created_at => Time.now.beginning_of_month..Time.now.end_of_month) 

या एक गुंजाइश के रूप में:

class Model < ActiveRecord::Base 
    scope :this_month, -> { where(:created_at => Time.now.beginning_of_month..Time.now.end_of_month) } 
end 
2

जवाब scope उदाहरण प्रदान गलत हैं। रेल स्कॉप्स पर उत्सुक मूल्यांकन का उपयोग करते हैं और इसलिए Time.now.beginning_of_month हमेशा उस महीने की शुरुआत होगी जब दायरे का प्रारंभिक मूल्यांकन किया गया था। दायरे में तारीखों का उपयोग करने का सही तरीका है लैम्ब्डा को scope पर पास करना।

class Model < ActiveRecord::Base 
    scope :this_month, -> { where(created_at: Time.now.beginning_of_month..Time.now.end_of_month) } 
end 

रेल में 4 स्कोप Lambda या Proc

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