सवाल दायरे में तर्क पास करें


क्या कोई इसका उपयोग करने के लिए एक उदाहरण प्रदान कर सकता है

scope

और पैरामीटर?

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

class Permission < ActiveRecord::Base
  scope :default_permissions, :conditions => { :is_default => true }
end

मेरे पास यह कोड है जो डिफ़ॉल्ट_प्रमिशन देता है और मैं इसे किसी दिए गए उपयोगकर्ता (user_id) के लिए डिफ़ॉल्ट अनुमतियों को वापस करने के लिए परिवर्तित करना चाहता हूं

धन्यवाद


44
2017-07-22 09:40


मूल




जवाब:


नया वाक्यविन्यास (रूबी 1.9+), जो त्रुटियों को रोक देगा भले ही आप उपयोगकर्ता को आपूर्ति न करें -

scope :default_permissions_for, ->(user = nil) { ... }

80
2017-09-28 15:53



बहुत उपयोगी जानकारी। तो क्या इसका मतलब यह है कि तर्क शून्य है, ब्लॉक निष्पादित नहीं होता है? रूबी बस उस तरह से व्यवहार करता है? - ahnbizcad
नहीं, इसका मतलब यह है कि यदि कोई मूल्य नहीं दिया जाता है तो उपयोगकर्ता को शून्य का डिफ़ॉल्ट मान मिलेगा। ब्लॉक चलाएगा, लेकिन आप देख सकते हैं कि user.nil है या नहीं? - nurinur
स्पष्टीकरण के लिए धन्यवाद। हे, यह वही है जिसने इसे ध्वनि की तरह बनाया, भले ही मेरा रूबी तर्क चिल्ला रहा था, "क्या तर्क सिर्फ तर्क के रूप में पारित नहीं होगा?" - ahnbizcad


लैम्ब्डा स्कॉप्स का प्रयोग करें:

scope :default_permissions_for, lambda{|user| { :conditions => { :user_id => user.id, :is_default => true } }

सावधान रहें क्योंकि एक लैम्ब्डा को पैरामीटर पास नहीं करते जब यह अपेक्षा करता है कि कोई अपवाद उठाएगा।


38
2017-07-22 09:45



नियंत्रक में इस अपवाद को पकड़ने के तरीके पर एक उदाहरण दिखाना संभव है? या यह जरूरी नहीं है? - glarkou
मुझे अपवाद नाम के बारे में निश्चित नहीं है, इसे अपने लॉग में जांचें और केवल ExceptionClass => e बचाव करें - keymone
रूबी में @keymone 1.9 आप उन त्रुटियों से बचने के लिए लैम्ब्डा पैरामीटर के लिए एक डिफ़ॉल्ट सेट कर सकते हैं जिसका आप उल्लेख कर रहे हैं। तो यह lambda होगा {| उपयोगकर्ता = शून्य | { :शर्तेँ...... - Dorian