2 5/9/20 संपादित करें
यदि आप रूबी 2.6 का उपयोग कर रहे हैं तो आप इसे अंतहीन श्रेणियों के साथ कर सकते हैं और रूबी 2.7 में आप शुरुआत-रहित श्रेणियों का उपयोग कर सकते हैं।
उदा.:
# Ruby >= 2.6
User.where(last_deposit: 10.days.ago..)
उत्पन्न करता है
SELECT "users".* FROM "users" WHERE "user"."last_deposit" >= '2020-04-29 21:58:39.109419'"
और
# Ruby >= 2.7
User.where(last_deposit: ..10.days.ago)
उत्पन्न करता है
SELECT "users".* FROM "users" WHERE "users"."last_deposit" <= '2020-04-29 22:01:05.582055'
संपादित करें
यह अब रेल 5 में संभव है!
User.where(last_deposit: 10.days.ago..DateTime::Infinity.new)
SQL उत्पन्न करेगा
SELECT `users`.* FROM `users` WHERE (`users`.`last_deposit` >= '2018-06-30 17:08:54.130085').
मूल (और रेल <5) उत्तर
ऐसा प्रतीत नहीं होता है कि बुनियादी where
. का उपयोग करने का कोई तरीका है टाइमस्टैम्प के लिए क्वेरी से अधिक या कम उत्पन्न करने के लिए हैश सिंटैक्स। मेरे प्रश्न में Current Simple Solution
. के तहत सबसे सरल और सबसे पठनीय तरीका बताया गया है ।
ऐसा करने का एक और तरीका एआरईएल का उपयोग करता है लेकिन आपको कुछ कम आम तौर पर देखी जाने वाली कॉलें करनी होंगी। सबसे पहले आप एआर क्लास 'एआरएल टेबल पर एक हैंडल प्राप्त कर सकते हैं, कॉलम तक पहुंच सकते हैं, gt
से अधिक का परिणाम पास कर सकते हैं , gteq
. से बड़ा या उसके बराबर , lt
. से कम , और/या lteq
. से कम या बराबर where
. के तर्क के साथ विधि ।
ऊपर की स्थिति में ऐसा किया जाएगा:
last_deposit_column = User.arel_table[:last_deposit]
last_deposit_over_ten_days_ago = last_deposit_column.gteq(10.days.ago)
User.where(last_deposit_over_ten_days_ago)