Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

Rails के `where` मेथड को मास्टर करना: व्यावहारिक उदाहरण और सर्वोत्तम अभ्यास

बुनियादी 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 का उपयोग करके अधिक कॉम्प्लेक्स क्वेरीज कैसे लिखें

अब इसे अभ्यास में लाने की आपकी बारी है।

पढ़ने के लिए धन्यवाद 🙂


  1. Ruby के grep मेथड में महारत: कोड उदाहरणों के साथ एक व्यावहारिक गाइड Ruby के grep मेथड में महारत: कोड उदाहरणों के साथ एक व्यावहारिक गाइड

    आइए grep मेथड के बारे में बात करते हैं। यह मेथड आपके लिए क्या कर सकता है? आप enumerable ऑब्जेक्ट्स को फ़िल्टर करने के लिए Grep का उपयोग कर सकते हैं, जैसे Arrays और Ranges। "लेकिन select पहले से ही ऐसा करता है!" हाँ, लेकिन grep अलग तरीके से काम करता है और अलग परिणाम उत्पन्न करता है। आइए कुछ

  1. Ruby के Map मेथड में महारत: उदाहरणों के साथ एक व्यावहारिक गाइड Ruby के Map मेथड में महारत: उदाहरणों के साथ एक व्यावहारिक गाइड

    Map एक Ruby मेथड है जिसका उपयोग आप Arrays, Hashes और Ranges के साथ कर सकते हैं। map का मुख्य उपयोग डेटा को ट्रांसफॉर्म करना है। उदाहरण के लिए: स्ट्रिंग्स की एक सरणी दिए जाने पर, आप हर स्ट्रिंग पर जा सकते हैं और हर कैरेक्टर को UPPERCASE बना सकते हैं। या यदि आपके पास User ऑब्जेक्ट्स की एक सूची है... आ

  1. Linux Watch कमांड में मास्टरी: सिंटैक्स, विकल्प और व्यावहारिक उदाहरण Linux Watch कमांड में मास्टरी: सिंटैक्स, विकल्प और व्यावहारिक उदाहरण

    Linux में watch कमांड एक काम करता है – एक कमांड को दोहराता है और परिणाम को बार-बार आउटपुट करता है, जिससे आप परिवर्तनों को देख सकते हैं। यहाँ इसका उपयोग कैसे करें। watch कमांड सिंटैक्स watch कमांड का सिंटैक्स इस प्रकार है: watch OPTIONS COMMAND ध्यान दें कि: OPTIONS नीचे दी गई तालिका से विकल्पों की