बुनियादी Where कंडीशन्स
where का उपयोग करने का उद्देश्य एक क्वेरी बनाना है जो आपके डेटाबेस में जानकारी को फ़िल्टर करती है, ताकि आपको केवल वही पंक्तियाँ मिलें जो आप चाहते हैं।
उदाहरण के लिए:
एक Book मॉडल दिया गया है, जिसमें title, author और category हैं।
आप किसी विशिष्ट लेखक द्वारा सभी किताबें ढूंढना चाह सकते हैं, या किसी विशेष श्रेणी के तहत दर्ज सभी किताबें।
यहाँ एक क्वेरी है:
Book.where(category: "Ruby")
यह "Ruby" की category वाली सभी किताबें लौटाता है।
आप कंडीशन्स को भी कंबाइन कर सकते हैं।
इस तरह:
Book.where(category: "Ruby", author: "Jesus Castello")
यह किताबें लौटाता है जो दोनों category और author से मेल खाती हैं।
और आप where को एक scope के साथ कंबाइन कर सकते हैं।
# scope definition
class Book
scope :long_title, -> { where("LENGTH(title) > 20") }
end
# controller code
@books = Book.long_title.where(category: "Ruby")
एक हैश (fruit: "apple") का उपयोग करने से आप चेक कर सकते हैं कि क्या एक कॉलम किसी चीज़ के बराबर है।
लेकिन क्या होगा अगर आप समानता की तलाश नहीं कर रहे हैं?
तब आपको एक स्ट्रिंग का उपयोग करना होगा।
Rails Where: Greater Than & Less Than
यदि आप "ग्रेटर दैन", "लेस दैन", या ऐसा कुछ चेक करना चाहते हैं...
इसे इस तरह करें:
Book.where("LENGTH(title) > 20")
यदि आपको वैल्यूज इंटरपोलेट करने की आवश्यकता है...
इसे इस तरह करें:
Book.where("LENGTH(title) > ?", params[:min_length])
यह ? एक "प्लेसहोल्डर" कहलाता है, और इसका उपयोग "SQL इंजेक्शन" हमलों से बचने के लिए सुरक्षा के लिए किया जाता है।
एक अन्य विकल्प नामित प्लेसहोल्डर्स का उपयोग करना है।
उदाहरण:
Book.where("LENGTH(title) > :min", min: params[:min_length])
मैं इसे क्वेश्चन मार्क प्लेसहोल्डर से कम आम पाता हूँ, लेकिन यह कई इंटरपोलेटेड वैल्यूज वाली क्वेरीज के लिए उपयोगी हो सकता है।
Where Not और Where Or कंडीशन्स का उपयोग कैसे करें
आइए अधिक कॉम्प्लेक्स क्वेरीज देखें।
यदि आप चेक करना चाहते हैं कि एक कंडीशन सच नहीं है, तो आप where को not मेथड के साथ कंबाइन कर सकते हैं।
यहाँ एक उदाहरण है:
Book.where.not(category: "Java")
एक और उदाहरण:
Book.where.not(title: nil)
यह Books को title के साथ ढूंढता है जो nil नहीं है।
OR कंडीशन के बारे में क्या?
आप where को or मेथड के साथ कंबाइन करके उन पंक्तियों को प्राप्त कर सकते हैं जो दो या अधिक कंडीशन्स में से किसी भी एक से मेल खाती हैं।
यहाँ यह कैसे काम करता है:
Book.where(category: "Programming").or(Book.where(category: "Ruby"))
यह दो where क्वेरीज को एक में जोड़ता है।
इसे आज़माएं!
Rails Where IN Array उदाहरण
हमने जो सभी उदाहरण देखे हैं वे एक विशिष्ट मान की तलाश करते हैं।
लेकिन आप कई मानों की तलाश कर सकते हैं।
कैसे?
एक एरे का उपयोग करके!
उदाहरण:
Book.where(id: [1,2,3])
यह एक "IN" क्वेरी जनरेट करता है जो एक ही समय में इन सभी ids को खोजेगा।
SELECT "books".* FROM "books" WHERE "books"."id" IN (1, 2, 3)
आप इस क्वेरी को Rails लॉग्स में पाएंगे।
Rails Joins एसोसिएशन कंडीशन
यदि आप एक एसोसिएशन वैल्यू के आधार पर मिलान करना चाहते हैं, तो आपको joins मेथड के साथ उस एसोसिएशन को उपलब्ध कराना होगा।
फिर आप ऐसा कर सकते हैं:
Book.joins(:comments).where(comments: { id: 2 })
इस क्वेरी के साथ आपको सभी किताबें मिलती हैं, जिनमें एक कमेंट है, और कमेंट id 2 है।
स्ट्रिंग वर्जन के लिए:
Book.joins(:comments).where("comments.id = 2")
जहां comments टेबल नाम है, और id कॉलम नाम है।
Where LIKE कंडीशन के साथ टेक्स्ट के अंदर कैसे खोजें
यदि आप एक खोज फ़ंक्शन लागू करना चाहते हैं, तो आप आंशिक मिलान की अनुमति देना चाह सकते हैं।
आप इसे "LIKE" क्वेरी के साथ कर सकते हैं।
यहाँ एक उदाहरण है:
Book.where("title LIKE ?", "%" + params[:q] + "%")
यह उन सभी शीर्षकों को ढूंढता है जिनमें खोज टेक्स्ट होता है, जो params (params[:q]) द्वारा प्रदान किया जाता है, शीर्षक के अंदर कहीं भी।
बहुत उपयोगी क्वेरी!
पर्सेंट सिंबल क्या है?
SQL में, % एक वाइल्डकार्ड कैरेक्टर है।
वीडियो: Where vs Find_By विस्तार से
सारांश
आपने अपने ActiveRecord मॉडल्स को क्वेरी करने के लिए Rails where मेथड का उपयोग करना सीख लिया है!
सहित:
- कई कंडीशन्स द्वारा फ़िल्टर कैसे करें
- कई पंक्तियों को कुशलतापूर्वक खोजने के लिए एरे का उपयोग कैसे करें
orऔरnotमेथड्स के साथ संयोजन मेंwhereका उपयोग करके अधिक कॉम्प्लेक्स क्वेरीज कैसे लिखें
अब इसे अभ्यास में लाने की आपकी बारी है।
पढ़ने के लिए धन्यवाद 🙂