Ruby bekommen erbenden Klasse
Ich bin dabei, mein erstes plugin für rails. Ich bin noch ziemlich neu in ruby und ich Frage mich, ob seine mögliche, um die erbende Klasse?
Zum Beispiel, ich versuche zu schaffen, ein plugin, mit denen unit-Tests und funktionale Tests, wenn Sie nicht mit Migrationen. Was ich versuche zu tun, ist das initialisieren einer Klasse variable mit dem Namen controller initialisiert werden, um die Art der controller, der geprüft wird.
Wenn ich eine Basis-Klasse ControllerTest:
class ControllerTest < Test::Unit::TestCase
attr_accessor :controller
def initialize
super
@controller = "call function that will find the inheriting classes name and create an instance of that controller type."
end
end
Also, was ich bin derzeit stecken, wird immer der name der erbenden Klasse. Ist das möglich? Und wenn nicht, kennt jemand einen anderen Weg wie ich gehen konnte, über die Umsetzung dieser?
Vielen Dank im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, um den Namen der Klasse, die Sie sind in dem moment auf, können Sie
self.class.name
. Wenn Sie möchten, Holen Sie sich die Oberklassen, können Sie mithilfe der array -self.class.ancestors
z.B.self.class.ancestors[1].name
. Die unmittelbare Oberklasse ist auch alsself.superclass
.Bearbeiten, Hinzugefügt Beispiel:
Diese Ausgänge
inherited
Rückruf statt, was diese Frage war über.Sehr einfach: verwenden Sie das "geerbt" callback.
Aus der RDoc für die Klasse:
vererbt(Unterklasse): Callback aufgerufen, wenn eine Unterklasse der aktuellen Klasse erzeugt.
Beispiel:
http://ruby-doc.org/core/classes/Class.html#M002785
initialize
Methode, um eine Instanz der anderen Klasse und weisen Sie es zu@controller
. Wenn Sie glauben, Ihre Antwort passt dieses Beispiel, ich wäre wirklich daran interessiert, zu sehen, wie Sie verwenden würden, es in diesem Kontext.Ich glaube, du wirst brauchen, um die Klassen, wie man Sie definiert...
Aus der RDoc für die Klasse:
Diese Liste wird nur Instanz-Methoden in der aktuellen Klasse
Und generische Lösung
c = some_class