में ओवरलोडेड विधि से बेस क्लास विधि को कॉल करना शायद मैं रूबी के लिए सही शब्दावली का उपयोग नहीं कर रहा हूं (और यदि मैं कृपया मुझे सही कर रहा हूं), लेकिन Google सिर्फ इस पर मेरी सहायता नहीं कर रहा है।उप-वर्ग
मेरे पास एक वर्ग है (इसे ऑर्डर कंट्रोलर कहते हैं) जो एक और वर्ग (इसे बेसस्टोर कंट्रोलर कहते हैं) बढ़ाता है। बेसस्टोर कंट्रोलर में मैंने before_filter
परिभाषित किया है जिसका उपयोग मेरी ऑर्डर कंट्रोलर को छोड़कर छोटे से मेरी साइट पर किया जाता है। इस विशेष स्थिति में मुझे कस्टम before_filter
को परिभाषित करने की आवश्यकता है जिसे कुछ अतिरिक्त तर्क करने की आवश्यकता है और फिर मेरे बेसस्टोर नियंत्रक में परिभाषित before_filter
पर कॉल करें।
मुझे नहीं पता कि यह कैसे करना है।
यहाँ मैं क्या कोशिश की है है, लेकिन ऐसा लगता है 'सुपर' कीवर्ड क्या नहीं मैं इसे होने की उम्मीद कर रहा था यह है कि:
class BaseStoreController < ActionController::Base
before_filter :authorize
protected
def authorize
#common authroization logic here
end
end
और
class OrderController < BaseStoreController
before_filter :authorize
protected
def authorize
#additional authroization logic here
super.authorize
end
end
अंतिम परिणाम मेरे कोड का यह है कि ऑर्डर कंट्रोलर में प्राधिकरण विधि निम्न त्रुटि के साथ विफल रही है:
You have a nil object when you didn't expect it! The error occurred while evaluating nil.authorize
वाह! मुझे लगता है कि अन्य भाषाओं के साथ मेरा अनुभव मुझे इस पर नुकसान पहुंचा रहा था ... मुझे उम्मीद है कि सुपर बेस क्लास के संदर्भ में होगा ... बेस क्लास विधि का संदर्भ नहीं जो मैं छुपा रहा था। यह एक आकर्षण की तरह काम किया, धन्यवाद! –
रुबी में, 'सुपर' विधि के विरासत संस्करण के लिए एक कॉल है, इसलिए आप जो कुछ भी लौटाए उस पर 'अधिकृत' कह रहे थे - इस मामले में, 'शून्य'। –
वास्तव में बेस क्लास का संदर्भ कैसे देगा? – Shayne