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

रूबी ऑन रेल्स में स्कोप का उपयोग कैसे करें

रेल में स्कोप क्या है और यह क्यों उपयोगी है?

खैर…

स्कोप कस्टम क्वेरी हैं जिन्हें आप अपने रेल मॉडल के अंदर scope . के साथ परिभाषित करते हैं विधि।

हर दायरे में दो तर्क होते हैं :

  1. एक नाम, जिसे आप अपने कोड में इस दायरे को कॉल करने के लिए उपयोग करते हैं।
  2. एक लैम्ब्डा, जो क्वेरी को लागू करता है।

ऐसा दिखता है :

class Fruit < ApplicationRecord
  scope :with_juice, -> { where("juice > 0") }
end

किसी स्कोप को कॉल करने के परिणामस्वरूप, आपको एक ActiveRecord::Relation मिलेगा वस्तु।

जिसका मतलब है कि आप दायरे को जंजीर से जोड़ सकते हैं और जोड़ सकते हैं!

उदाहरण :

Fruit.with_juice.with_round_shape.first(3)

अब :

रेल स्कोप के बारे में जानने के लिए और भी बहुत कुछ है, तो आइए इस विषय को एक्सप्लोर करते रहें।

स्कोप का उपयोग कब करें?

ठीक है, स्कोप अच्छे हैं, लेकिन आपको उनका उपयोग कब करना चाहिए?

आइए एक उदाहरण देखें।

def index
  @books = Book.where("LENGTH(title) > 20")
end

यह एक index है नियंत्रक कार्रवाई जो 20 वर्णों से अधिक लंबे शीर्षक वाली पुस्तकों को प्रदर्शित करना चाहती है।

ठीक है।

लेकिन अगर आप इस क्वेरी का इस्तेमाल अन्य जगहों पर करना चाहते हैं, तो आपके पास डुप्लीकेट कोड होगा।

डुप्लीकेट कोड आपके प्रोजेक्ट को बनाए रखने के लिए कठिन बनाता है।

आइए इस क्वेरी को एक दायरे में ले जाएं।

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

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

अब हमारी नियंत्रक क्रिया इस तरह दिखती है :

def index
  @books = Book.with_long_title
end

बढ़िया!

तर्कों के साथ रेल स्कोप का उपयोग कैसे करें

हो सकता है कि आप एक चर को एक दायरे में पेश करना चाहें ताकि आप इसे और अधिक लचीला बना सकें।

यहां बताया गया है :

class Book
  scope :with_long_title, ->(length) { where("LENGTH(title) > ?", length) }
end

प्रश्न चिह्न (? ) एक प्लेसहोल्डर है, इसे length . के मान से बदल दिया जाएगा . यह आपके कोड को सुरक्षित बनाता है।

यदि आप एक डिफ़ॉल्ट मान चाहते हैं :

class Book
  scope :with_long_title, ->(length = 20) { where("LENGTH(title) > ?", length) }
end

इसे आज़माएं!

स्कोप बनाम क्लास मेथड

स्कोप कुछ भी जादुई या सुपर स्पेशल नहीं कर रहे हैं।

वे सिर्फ तरीके हैं।

वास्तव में... आप वर्ग विधियों का उपयोग करके भी ऐसा ही कर सकते हैं!

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

class Fruit
  def self.with_juice
    where("juice > 0")    
  end
end

लेकिन कक्षा विधियों पर स्कोप का उपयोग करने के लिए डिज़ाइन के फायदे हैं।

यहां बताया गया है :

  • कार्यक्षेत्र उनके सिंटैक्स के कारण क्लीनर कोड में परिणत होते हैं
  • स्कोप का इस्तेमाल बिल्कुल एक चीज के लिए किया जाता है, ताकि आप जान सकें कि जब आप एक चीज देखते हैं तो आपको क्या मिलता है
  • कार्यक्षेत्र अन्य विधियों के साथ मिश्रित नहीं हैं, इसलिए उन्हें खोजना आसान है

कार्यक्षमता के संदर्भ में, अंतर केवल इतना है कि कार्यक्षेत्र एक ActiveRecord::Relation की गारंटी देते हैं , और कक्षा के तरीके नहीं हैं।

यह आपको त्रुटियों से बचने में मदद करता है जब आपका दायरा कुछ भी नहीं लौटाता है।

डिफ़ॉल्ट दायरे का इस्तेमाल न करें

एक डिफ़ॉल्ट दायरा वह होता है जो आपके मॉडल पर स्वचालित रूप से लागू होता है।

उदाहरण :

class Post
  default_scope { where(published: true) }
end

हाँ!

डिफ़ॉल्ट स्कोप बहुत आकर्षक होते हैं।

लेकिन वे अक्सर गलत विकल्प होते हैं क्योंकि आप शायद भूल जाएंगे कि आपने उन्हें परिभाषित किया है, अजीब त्रुटियों में भाग लिया है, और कीमती समय डिबगिंग बर्बाद करते हैं।

उसके साथ…

यदि आपको डिफ़ॉल्ट स्कोप के साथ काम करना है, तो आपको unscoped . का उपयोग करने की आवश्यकता हो सकती है वर्तमान में लागू सभी क्षेत्रों को अक्षम करने की विधि।

वीडियो ट्यूटोरियल देखें

सारांश

अच्छी नौकरी! इस लेख को पढ़ने के परिणामस्वरूप, आपने सीखा है कि सबसे प्रभावी तरीके से रेल स्कोप का उपयोग कैसे किया जाता है।

इस नए ज्ञान को व्यवहार में लाना न भूलें ताकि आप याद रख सकें कि यह कैसे काम करता है।

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


  1. रूबी उपनाम कीवर्ड का उपयोग कैसे करें

    आप रूबी पद्धति को दो तरह से वैकल्पिक नाम दे सकते हैं: उपनाम (कीवर्ड) उपनाम_विधि क्योंकि वे एक ही काम को थोड़े अलग तरीके से करते हैं, यह एक भ्रमित करने वाला विषय हो सकता है। यह छवि मतभेदों का सारांश है : आइए एक ठोस समझ पाने के लिए इन अंतरों को और अधिक विस्तार से देखें! उपनाम कीवर्ड सबसे पहले

  1. रूबी में स्ट्रक्चर और ओपनस्ट्रक्चर का उपयोग कैसे करें?

    रूबी में स्ट्रक्चर क्या है? एक संरचना एक अंतर्निहित रूबी वर्ग है, इसका उपयोग नए वर्ग बनाने के लिए किया जाता है जो मूल्य वस्तुओं का उत्पादन करते हैं। संबंधित विशेषताओं को एक साथ संग्रहीत करने के लिए एक मूल्य वस्तु का उपयोग किया जाता है। यहां एक उदाहरण दिया गया है : एक Point दो निर्देशांकों के साथ

  1. रेल एप्लिकेशन में OmniAuth-Twitter का उपयोग कैसे करें

    इस ट्यूटोरियल में, आप सीखेंगे कि आपके एप्लिकेशन के उपयोगकर्ताओं को अपने ट्विटर अकाउंट का उपयोग करके लॉग इन करने की अनुमति कैसे दी जाए। OAuth जैसे टूल से ऐसा करना आसान बना दिया गया है। आप OmniAuth-Twitter का उपयोग करेंगे, जिसमें OmniAuth के लिए Twitter रणनीति शामिल है। चलो गोता लगाएँ! आरंभ कर