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

रेल का उपयोग कैसे करें जहां विधि (उदाहरण के साथ)

रेल में, आप अपने डेटा तक पहुँचने के लिए अपने मॉडल के माध्यम से डेटाबेस को क्वेरी कर सकते हैं।

आप ActiveRecord . का उपयोग करके ऐसा कर सकते हैं तरीके।

जैसे where , find , या find_by

परिणामस्वरूप आपको मिलता है :

  • find_byके साथ , एक रिकॉर्ड या nil
  • where के साथ , एक ActiveRecord::Relation वस्तु
  • find के साथ , एक एकल रिकॉर्ड, जो इसके प्राथमिक कॉलम (आमतौर पर id . द्वारा पाया जाता है) ), अगर नहीं मिला तो एक अपवाद उठाता है

दूसरे शब्दों में :

यदि आप एक रिकॉर्ड (एक विशिष्ट उपयोगकर्ता) की अपेक्षा कर रहे हैं, तो find_by use का उपयोग करें , एकाधिक रिकॉर्ड (उपयोगकर्ताओं की एक सूची) के लिए where . का उपयोग करें ।

लेकिन where इसका उपयोग करने के कई तरीके हैं, जो अक्सर शुरुआती लोगों को भ्रमित करते हैं।

कोई बात नहीं!

हम उन विभिन्न तरीकों पर एक नज़र डालने जा रहे हैं जिनका उपयोग आप where . कर सकते हैं आपके रेल अनुप्रयोगों में।

बेसिक वेयर कंडीशंस

where . का उपयोग करने का उद्देश्य एक क्वेरी बनाना है जो आपके डेटाबेस में जानकारी को फ़िल्टर करती है, ताकि आपको केवल वही पंक्तियाँ मिलें जो आप चाहते हैं।

उदाहरण के लिए :

एक Book दिया गया मॉडल, title . के साथ , author &category

हो सकता है कि आप किसी विशिष्ट लेखक की सभी पुस्तकों, या किसी विशेष श्रेणी के अंतर्गत दायर सभी पुस्तकों का पता लगाना चाहें।

यहां एक प्रश्न है :

Book.where(category: "Ruby")

यह सभी पुस्तकों को category . के साथ लौटाता है "रूबी" का।

आप शर्तों को भी जोड़ सकते हैं।

इसे पसंद करें :

Book.where(category: "Ruby", author: "Jesus Castello")

यह उन पुस्तकों को लौटाता है जो category . दोनों से मेल खाती हैं और author

और आप where combine को जोड़ सकते हैं एक दायरे के साथ।

# scope definition
class Book
  scope :long_title, -> { where("LENGTH(title) > 20") }
end

# controller code
@books = Book.long_title.where(category: "Ruby")

हैश का उपयोग करना (fruit: "apple" ), आपको यह जांचने की अनुमति देता है कि कोई कॉलम किसी चीज़ के बराबर है या नहीं।

लेकिन क्या होगा अगर आप समानता की तलाश नहीं कर रहे हैं?

फिर आपको एक स्ट्रिंग का उपयोग करना होगा।

रेल कहां:इससे बड़ा और इससे कम

अगर आप "इससे बड़ा", "इससे कम", या ऐसा कुछ देखना चाहते हैं...

इसे इस तरह करें :

Book.where("LENGTH(title) > 20")

यदि आपको मूल्यों को प्रक्षेपित करने की आवश्यकता है…

इसे इस तरह करें :

Book.where("LENGTH(title) > ?", params[:min_length])

यह ? इसे "प्लेसहोल्डर" कहा जाता है, और इसका उपयोग सुरक्षा के लिए "एसक्यूएल इंजेक्शन" हमलों से बचने के लिए किया जाता है।

एक अन्य विकल्प नामित प्लेसहोल्डर का उपयोग करना है।

उदाहरण :

Book.where("LENGTH(title) > :min", min: params[:min_length])

मुझे यह प्रश्न चिह्न प्लेसहोल्डर की तुलना में कम सामान्य लगता है, लेकिन यह कई प्रक्षेपित मूल्यों वाले प्रश्नों के लिए उपयोगी हो सकता है।

कहां नहीं और कहां या शर्तों का उपयोग कैसे करें

आइए अधिक जटिल प्रश्नों को देखें।

यदि आप यह जांचना चाहते हैं कि कोई शर्त सत्य नहीं है, तो आप where . को जोड़ सकते हैं not . के साथ विधि।

यहां एक उदाहरण दिया गया है :

Book.where.not(category: "Java")

एक और उदाहरण :

Book.where.not(title: nil)

यह Book ढूँढता है एक title के साथ यह nil नहीं है ।

OR शर्त के बारे में क्या?

आप where combine को जोड़ सकते हैं or . के साथ दो या दो से अधिक स्थितियों में से किसी एक से मेल खाने वाली पंक्तियों को प्राप्त करने की विधि।

यहां बताया गया है कि यह कैसे काम करता है :

Book.where(category: "Programming").or(Book.where(category: "Ruby"))

यह दो को जोड़ती है where एक में पूछताछ।

इसे आज़माएं!

रेल जहां सरणी उदाहरण में है

हमने जो भी उदाहरण देखे हैं, वे एक विशिष्ट मान की तलाश में हैं।

लेकिन आप कई मानों की तलाश कर सकते हैं।

कैसे?

एक सरणी का उपयोग करना!

उदाहरण :

Book.where(id: [1,2,3])

यह एक "IN" क्वेरी उत्पन्न करता है जो एक ही समय में, इन सभी आईडी को खोजेगा।

SELECT "books".* FROM "books" WHERE "books"."id" IN (1, 2, 3)

आपको यह प्रश्न रेल लॉग में मिलेगा।

रेल एसोसिएशन कंडीशन में शामिल होता है

यदि आप किसी संबद्धता मान के आधार पर मिलान करना चाहते हैं, तो आपको उस संबद्धता को joins के साथ उपलब्ध कराना होगा विधि।

तब आप यह कर सकते हैं :

Book.joins(:comments).where(comments: { id: 2 })

इस क्वेरी के साथ आपको सभी पुस्तकें मिलती हैं, जिनमें एक टिप्पणी होती है, और टिप्पणी id . होती है है 2

स्ट्रिंग संस्करण के लिए :

Book.joins(:comments).where("comments.id = 2")

जहां comments तालिका का नाम है, और id स्तंभ नाम है।

एक जैसी स्थिति के साथ अंदर के टेक्स्ट को कैसे खोजें

यदि आप एक खोज फ़ंक्शन को लागू करना चाहते हैं, तो आप आंशिक मिलान की अनुमति देना चाह सकते हैं।

आप इसे "LIKE" क्वेरी के साथ कर सकते हैं।

यहां एक उदाहरण दिया गया है :

Book.where("title LIKE ?", "%" + params[:q] + "%")

यह उन सभी शीर्षकों को ढूंढता है जिनमें खोज टेक्स्ट होता है, जो पैराम्स (params[:q]) द्वारा प्रदान किया जाता है। ), शीर्षक के अंदर कहीं भी।

बहुत उपयोगी प्रश्न!

प्रतिशत चिह्न क्या है? ?

SQL में, % एक वाइल्डकार्ड वर्ण है।

वीडियो:कहां बनाम Find_B विस्तार से

सारांश

आपने सीखा है कि रेल का उपयोग कैसे किया जाता है where अपने ActiveRecord . को क्वेरी करने की विधि मॉडल!

सहित :

  • कई स्थितियों के आधार पर फ़िल्टर कैसे करें
  • कई पंक्तियों को कुशलतापूर्वक खोजने के लिए सरणियों का उपयोग कैसे करें
  • कैसे उपयोग करें where or . के संयोजन में &not अधिक जटिल प्रश्न लिखने के तरीके

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

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


  1. रूबी ग्रेप विधि का उपयोग कैसे करें (उदाहरण के साथ)

    आइए बात करते हैं grep . के बारे में विधि। यह विधि आपके लिए क्या कर सकती है? आप ग्रेप का उपयोग एरेज़ और रेंज जैसी असंख्य वस्तुओं को फ़िल्टर करने के लिए कर सकते हैं। “लेकिन चुनें पहले से ही ऐसा करता है!” हां, लेकिन grep एक अलग तरीके से काम करता है और यह अलग परिणाम देता है। आइए कुछ उदाहरण देखें।

  1. रूबी मानचित्र विधि का उपयोग कैसे करें (उदाहरण के साथ)

    मैप एक रूबी विधि है जिसका उपयोग आप ऐरे, हैश और रेंज के साथ कर सकते हैं। मानचित्र का मुख्य उपयोग डेटा को ट्रांसफ़ॉर्म करना है। उदाहरण के लिए : स्ट्रिंग्स की एक सरणी को देखते हुए, आप प्रत्येक स्ट्रिंग पर जा सकते हैं और प्रत्येक वर्ण को अपरकेस बना सकते हैं। या यदि आपके पास User . की सूची है ऑब्जेक्

  1. उदाहरण के साथ, लिनक्स में वॉच कमांड का उपयोग कैसे करें

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