मैं उन सभी रिकॉर्ड्स को प्राप्त करना चाहता हूं, जहां create_at फ़ील्ड आज (एक तारीख) से कम है। क्या ऐसा कुछ है:
MyTable.find_by_created_at(< 2.days.ago)
जवाबों:
ActiveRecord का मानक तरीके से उपयोग करना :
MyModel.where("created_at < ?", 2.days.ago)
अंतर्निहित Arel इंटरफ़ेस का उपयोग करना :
MyModel.where(MyModel.arel_table[:created_at].lt(2.days.ago))
Arel पर एक पतली परत का उपयोग करना :
MyModel.where(MyModel[:created_at] < 2.days.ago)
स्क्वील का उपयोग करना :
MyModel.where { created_at < 2.days.ago }
MyTable
2 दिन पहले तक बनाए गए सभी रिकॉर्ड प्राप्त करने के लिए :
MyTable.where(created_at: Date.new..2.days.ago)
ध्यान दें कि आप भविष्य में इसी तरह से फ़ील्ड वाले फ़ील्ड के रिकॉर्ड भी देख सकते हैं, यानी अब से कम से कम 2 दिनों के MyTable
साथ सभी रिकॉर्ड प्राप्त करने के लिए event_date
:
MyTable.where(event_date: 2.days.from_now..DateTime::Infinity.new)
"created_at" BETWEEN $1 AND $2 [["created_at", "4713-01-01 BC"], ["created_at", "2020-03-31 21:43:28.113759"]]
एक अन्य तरीका यह है कि इस तरह से अपने उत्तर में टोकेल सुजेनस्टेड की तरह Arel इंटरफ़ेस का उपयोग करके MyModel
या इसमें एक स्कोप बनाया जाए:ApplicationRecord
scope :arel, ->(column, predication, *args) { where(arel_table[column].public_send(predication, *args)) }
गुंजाइश का उदाहरण उपयोग:
MyModel.arel(:created_at, :lt, 2.days.ago)
सभी विधेय के लिए, दस्तावेज़ या स्रोत कोड की जाँच करें । यह गुंजाइश where
श्रृंखला को नहीं तोड़ती है । इसका मतलब आप यह भी कर सकते हैं:
MyModel.custom_scope1.arel(:created_at, :lt, 2.days.ago).arel(:updated_at, :gt, 2.days.ago).custom_scope2
ActiveRecord::Relation
नाम के साथ एक उदाहरण विधि को परिभाषित करता है arel
जिसका अर्थ है कि आपको बस एक अलग नाम चुनने की आवश्यकता है।
MyTable1.where(MyTable[:created_at] < Time.now)
यह संभव है?