Vielleicht verwende ich gerade nicht die richtige Terminologie für Ruby (und wenn ich bin bitte korrigieren Sie mich), aber Google gerade hilft mir nicht auf diesem.Calling Basisklasse Methode von überladenen Methode in Sub-Klasse
Was ich habe, ist eine Klasse (nennen Sie es OrderController), die eine andere Klasse erweitert (nennen Sie es BaseStoreController). Im BaseStoreController habe ich eine before_filter
definiert, die auf meiner gesamten Site verwendet wird, mit der Ausnahme von meinem OrderController. In dieser besonderen Situation musste ich eine benutzerdefinierte before_filter
definieren, die einige zusätzliche Logik und dann die before_filter
in meinem BaseStoreController definiert aufrufen muss.
Was ich nicht weiß ist, wie man das macht. Hier
ist, was ich versucht habe, aber es scheint, dass die ‚super‘ Schlüsselwort ist nicht das, was ich erwartet hatte, es zu sein:
class BaseStoreController < ActionController::Base
before_filter :authorize
protected
def authorize
#common authroization logic here
end
end
und
class OrderController < BaseStoreController
before_filter :authorize
protected
def authorize
#additional authroization logic here
super.authorize
end
end
Das Endergebnis meines Codes ist, dass die Autorisierung-Methode in der OrderController mit dem folgenden Fehler fehlschlägt:
You have a nil object when you didn't expect it! The error occurred while evaluating nil.authorize
wow! Ich denke, meine Erfahrung mit anderen Sprachen hat mir dabei geschadet ... Ich erwartete Super, eine Referenz auf die Basisklasse zu sein ... kein Verweis auf die Basisklassenmethode, die ich versteckte. Das hat wie ein Zauber funktioniert, danke! –
In Ruby ist 'super' ein Aufruf der geerbten Version der Methode, also haben Sie' authorize' aufgerufen, was auch immer zurückgegeben wurde - in diesem Fall, nil'. –
Wie würde man eigentlich auf die Basisklasse verweisen? – Shayne