ich ein Ruby-Projekt, das die folgende Architektur hat:
Project architectureMachen Sie eine geerbte Funktion dynamische
Alle meine Kind-Controller (city1, city2) erben von der übergeordneten Steuerung an der Projektwurzel. Ich habe eine Methode in der übergeordneten Steuerung:
class Controller
def get_directories
Dir.chdir(File.dirname(__FILE__) + "/")
Dir.glob('*').select { |f| File.directory? f }
end
end
Mein Kind-Controller:
require_relative '../controller'
class City1Controller < Controller
end
und
require_relative '../controller'
class City2Controller < Controller
end
Von meinem Verständnis, sieht diese Methode in dem aktuellen Arbeitsverzeichnis und gibt eine Array der Ordner, die sich in diesem Verzeichnis befinden.
Ich erwartete, dass die untergeordneten Controller diese Funktion in einer Weise erben, in der die get_directories für das untergeordnete Verzeichnis lokal sind, aber die Ordner im übergeordneten Verzeichnis angezeigt werden.
Das ist, was geschieht:
controller.get_directories => city1 city2
city1_controller.get_directories => city1 city2
city2_controller.get_directories => city1 city2
Das ist, was ich passieren soll:
controller.get_directories => city1 city2
city1_controller.get_directories => monument1 monument2
city2_controller.get_directories => monument3 monument4
Wenn ich genau die gleiche Methode in jedem Kind Controller (also das Überschreiben der Eltern Definition) wiederholen, es funktioniert so wie ich es möchte. Aber sollte uns das Erbe nicht ersparen?
Ist das Problem in der Methode selbst, in wie die Vererbung funktioniert, oder wie ich es benutze?
Beitrag hier alles direkt
Eine Option könnte
__FILE__
das Verfahren so passieren sein. Kein Teil Ihrer Frage sollte sich auf eine externe Website verlassen. Und wenn du Code hast, poste es hier als Text, nicht als Bild. – CarcigenicateEntschuldigung, ich musste beheben, welcher Teil meines Textes stackoverflow nicht mochte (gab Fehler über Code) –
Das Problem ist in, wie Sie es verwenden. '__FILE__' ist keine Methode und Sie sollten kein methodisches Verhalten von ihm erwarten. –