में डिफ़ॉल्ट_स्कोप ActiveRecord में एक डिफ़ॉल्ट स्कोप निर्दिष्ट करने के लिए default_scope
क्लास विधि है। उदाहरण के लिएसेक्वेल
class User < ActiveRecord::Base
default_scope where(:deleted => false)
end
User.all # => SELECT * FROM users WHERE deleted = 0;
मैं इसे Sequel::Model
में कैसे कर सकता हूं?
संपादित करें:
कुछ Googling के बाद मैं अंत में कुछ उपयोगी जानकारी नहीं मिली।
class User < Sequel::Model
# Define some "scopes" (filters on the dataset)
dataset_module do
def existing
filter(deleted: false)
end
def active
filter(disabled: false)
end
end
# This is the equivalent to a default_scope. Set one of the datasets
# as the default dataset for this model.
set_dataset(self.active)
end
उत्पन्न क्वेरी तो इस तरह दिखता है:
User.all # => SELECT * FROM `users` WHERE (`deleted` IS FALSE)
रास्ता द्वारा: unscoped
के बराबर unfiltered
है:
User.unfiltered.all # => SELECT * FROM `users`
लेकिन, वहाँ एक समस्या है । यदि आप किसी ऐसे उपयोगकर्ता को अपडेट करने का प्रयास करते हैं जो आपको एक unfiltered डेटासेट से मिला है, तो यह दिए गए डेटासेट का उपयोग कर उपयोगकर्ता को अपडेट करने का प्रयास करता है।
User.create(disabled: true, deleted: true)
User.all # => []
u = User.unfiltered.first # => Given user
u.disabled = false
u.save # => UPDATE users SET ... WHERE (disabled IS FALSE AND id = 1)
# => Sequel::NoExistingObject: Attempt to update object did not result in a single row modification
तो मैं शुरुआत में वापस आ गया हूं। इसके लिए कोई कामकाज?