2012-07-03 23 views
85

से अधिक/कम से कम का उपयोग करना मैं 200 से अधिक आईडी वाले सभी उपयोगकर्ताओं को खोजने का प्रयास कर रहा हूं, लेकिन मुझे विशिष्ट वाक्यविन्यास के साथ कुछ परेशानी हो रही है।रेल: जहां बयान

User.where(:id > 200) 

और

User.where("? > 200", :id) 

दोनों में विफल रहा है।

कोई सुझाव?

उत्तर

176

इस

User.where("id > ?", 200) 
+0

इसके अलावा एर्नी मिलर – cpuguy83

+4

से Squeel मणि की जाँच वहाँ का उपयोग कर 'पसंद करते हैं करने के लिए किसी भी कारण है', बल्कि? '200' को रेखांकित करने से? – dukedave

+8

यह स्वचालित रूप से 200 से बच निकलता है (क्या उपयोगकर्ता के मूल्य में प्रवेश करना संभव था, यह एसक्यूएल इंजेक्शन हमलों की संभावना से बचाता है) – user1051849

71

रेल 4 में मैं केवल यह परीक्षण किया है की कोशिश करो, लेकिन इस व्यवहार पाने के लिए एक where हैश के साथ एक श्रृंखला का उपयोग करने के लिए एक दिलचस्प तरीका है।

User.where(id: 201..Float::INFINITY) 

एसक्यूएल

SELECT `users`.* FROM `users` WHERE (`users`.`id` >= 201) 

ही -Float::INFINITY साथ कम से कम के लिए किया जा सकता है उत्पन्न होगा।

मैंने अभी एक ही प्रश्न पोस्ट किया है जो here on SO के साथ ऐसा करने के बारे में पूछ रहा है।

+0

यह उत्तर रेल 4 आईएमओ के लिए सबसे अच्छा है। काफी समय से इसका इस्तेमाल कर रहे थे और पूरी तरह से काम करता है। –

+2

जिज्ञासा से, स्वीकृत उत्तर से बेहतर क्यों है? – mecampbellsoup

+4

सुपीरियर भ्रामक है। आम तौर पर आप अपने एआरएल प्रश्नों के साथ अधिक लचीलापन प्राप्त करते हैं यदि आप तारों पर हैश सिंटैक्स का उपयोग करने में सक्षम हैं, इसलिए कई लोग इस समाधान को पसंद करेंगे। आपके प्रोजेक्ट/टीम/संगठन के आधार पर आप कुछ ऐसा चाहते हैं जो कोड पर नजर रखने वाले किसी व्यक्ति के लिए आसान हो, जिसे स्वीकार किया गया जवाब है। – Aaron

4

आप एक अधिक सहज लेखन चाहते हैं, यह एक मणि squeel बुलाया दूँगी कि मौजूद आप इस तरह अपने अनुदेश लिखें:

User.where{id > 200} 

सूचना 'ब्रेस' अक्षर {} और id सिर्फ एक पाठ किया जा रहा है ।

आपको बस इतना करना है अपने Gemfile को squeel जोड़ने के लिए है:

gem "squeel" 

यह आपके जीवन में बहुत कुछ कम हो सकता है जब रूबी में जटिल एसक्यूएल बयान लेखन।

+5

मैं अनुकरण का उपयोग करने से बचने की सलाह देते हैं। दीर्घकालिक बनाए रखना मुश्किल है और कभी-कभी अजीब व्यवहार होता है। इसके अलावा यह कुछ सक्रिय रिकॉर्ड संस्करणों –

+0

के साथ छोटी है, मैं कुछ वर्षों से स्क्वाइल का उपयोग कर रहा हूं और अभी भी इसके साथ खुश हूं। लेकिन शायद यह एक और ओआरएम की कोशिश करने लायक है, उदाहरण के लिए अनुक्रम (<> स्क्वाइल), जो ActiveRecord को प्रतिस्थापित करने के लिए अच्छी सुविधाओं का वादा करता है। – Douglas

16

एक बेहतर उपयोग उपयोगकर्ता मॉडल में एक गुंजाइश बनाने के लिए है where(arel_table[:id].gt(id))

0

छोटा:

User.where("id > 200") 
+4

मुझे लगता है कि यह गतिशील होना चाहिए, और पोस्टर पैरामीटरयुक्त प्रश्नों का उपयोग करके एसक्यूएल इंजेक्शन से बचना चाहता है ('जहां (" id>? ", 200) 'वाक्यविन्यास)। यह प्राप्त नहीं करता है। –