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

Ruby on Rails में Scopes को मास्टर करना: एक व्यावहारिक गाइड

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

Scope, Rails मॉडल के अंदर scope मेथड का उपयोग करके परिभाषित की जाने वाली कस्टम क्वेरीज हैं।

हर scope दो आर्गुमेंट्स लेता है:

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

यह कुछ इस तरह दिखता है:

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

Scope को कॉल करने के परिणामस्वरूप, आपको एक ActiveRecord::Relation ऑब्जेक्ट मिलेगा।

इसका मतलब है कि आप scopes को चेन और कंबाइन कर सकते हैं!

उदाहरण:

Fruit.with_juice.with_round_shape.first(3)

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

ठीक है, scopes कूल हैं, लेकिन आपको उनका उपयोग कब करना चाहिए?

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

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

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

यह ठीक है।

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

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

आइए इस क्वेरी को एक scope में मूव करते हैं।

इस तरह:

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

अब हमारा कंट्रोलर एक्शन इस तरह दिखता है:

def index
  @books = Book.with_long_title
end

बहुत बढ़िया!

आर्गुमेंट्स के साथ Rails Scopes का उपयोग कैसे करें

आप एक scope में वेरिएबल पेश करना चाह सकते हैं ताकि इसे और अधिक फ्लेक्सिबल बनाया जा सके।

यहाँ कैसे:

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

इसे आज़माएं!

Scope बनाम Class Method

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

वे सिर्फ मेथड्स हैं।

वास्तव में... आप क्लास मेथड्स का उपयोग करके भी वही काम कर सकते हैं!

इस तरह:

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

लेकिन क्लास मेथड्स पर scopes का उपयोग करने के डिज़ाइन फायदे हैं।

यहाँ क्यों:

  • Scopes अपने सिंटैक्स के कारण क्लीनर कोड का परिणाम देते हैं
  • Scopes ठीक एक चीज़ के लिए उपयोग किए जाते हैं, इसलिए आप जानते हैं कि आपको क्या मिलेगा जैसे ही आप एक को देखते हैं
  • Scopes अन्य मेथड्स के साथ मिक्स नहीं होते, इसलिए उन्हें ढूंढना आसान होता है

फंक्शनैलिटी के संदर्भ में, एकमात्र अंतर यह है कि scopes एक ActiveRecord::Relation की गारंटी देते हैं, और क्लास मेथड्स नहीं।

यह आपको तब एरर से बचने में मदद करता है जब आपका scope कुछ भी वापस नहीं करता।

Default Scopes का उपयोग न करें

एक डिफ़ॉल्ट scope वह है जो आपके मॉडल पर ऑटोमैटिकली लागू होता है।

उदाहरण:

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

हाँ! डिफ़ॉल्ट scopes बहुत आकर्षक हैं।

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

इसके साथ ही...

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

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

सारांश

बहुत बढ़िया! इस आर्टिकल को पढ़ने के परिणामस्वरूप, आपने Rails scopes का उपयोग करने का सबसे प्रभावी तरीका सीख लिया है।

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

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


  1. Ruby में Alias कीवर्ड का उपयोग करके मेथड एलियास बनाना Ruby में Alias कीवर्ड का उपयोग करके मेथड एलियास बनाना

    Ruby में किसी मेथड को वैकल्पिक नाम देने के दो तरीके हैं: alias (कीवर्ड) alias_method चूंकि ये दोनों थोड़े अलग तरीके से एक ही काम करते हैं, इसलिए यह विषय भ्रमित करने वाला हो सकता है। यह छवि अंतरों का सारांश है: आइए इन अंतरों को विस्तार से समझते हैं ताकि आपको ठोस समझ मिल सके! alias कीवर्ड पहला है a

  1. रूबी स्ट्रक्ट्स और OpenStruct में महारत: कुशल वैल्यू ऑब्जेक्ट्स रूबी स्ट्रक्ट्स और OpenStruct में महारत: कुशल वैल्यू ऑब्जेक्ट्स

    रूबी में स्ट्रक्ट क्या है? एक स्ट्रक्ट एक बिल्ट-इन रूबी क्लास है, इसका उपयोग वैल्यू ऑब्जेक्ट्स उत्पन्न करने वाली नई क्लासेस बनाने के लिए किया जाता है। एक वैल्यू ऑब्जेक्ट संबंधित विशेषताओं को एक साथ संग्रहीत करने के लिए उपयोग किया जाता है। यहां एक उदाहरण है: दो निर्देशांकों (x और y) के साथ एक Point।

  1. OmniAuth-Twitter के साथ Rails में ट्विटर लॉगिन एकीकृत करें: चरण-दर-चरण मार्गदर्शिका OmniAuth-Twitter के साथ Rails में ट्विटर लॉगिन एकीकृत करें: चरण-दर-चरण मार्गदर्शिका

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