Wie liste ich alle Methoden auf, auf die ein bestimmtes Objekt Zugriff hat?
Ich habe ein @current_user
Objekt, das im Anwendungscontroller definiert ist:
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
Und möchten sehen, welche Methoden mir in der Ansichtsdatei zur Verfügung stehen. Insbesondere möchte ich sehen, welche Methoden eine :has_many
Zuordnung bereitstellt. (Ich weiß, was :has_many
zu bieten ist, möchte das aber überprüfen.)
ruby-on-rails
ruby
Dolch
quelle
quelle
@current_user
?Antworten:
Im Folgenden werden die Methoden aufgelistet, über die die Benutzerklasse verfügt, die die Basisobjektklasse nicht hat ...
Beachten Sie, dass dies
methods
eine Methode für Klassen und für Klasseninstanzen ist.Hier sind die Methoden meiner Benutzerklasse, die nicht zur ActiveRecord-Basisklasse gehören:
Beachten Sie, dass die Methoden, die als Ergebnis der (vielen) has_many-Beziehungen erstellt wurden, die in der User-Klasse definiert sind, nicht in den Ergebnissen des
methods
Aufrufs enthalten sind.Hinzugefügt Beachten Sie Folgendes: has_many fügt keine Methoden direkt hinzu. Stattdessen verwendet die ActiveRecord-Maschinerie Ruby
method_missing
undresponds_to
Techniken, um Methodenaufrufe im laufenden Betrieb zu verarbeiten. Infolgedessen werden die Methoden nicht im Methodenergebnis aufgeführtmethods
.quelle
Modul # instance_methods
quelle
Oder nur
User.methods(false)
um nur die in dieser Klasse definierten Methoden zurückzugeben.quelle
Du kannst tun
Zur besseren Auflistung
quelle
Was ist mit einem davon?
quelle
Angenommen, der Benutzer hat_ viele Beiträge:
quelle
Um die Antwort von @ clyfe zu erläutern. Mit dem folgenden Code können Sie eine Liste Ihrer Instanzmethoden abrufen (vorausgesetzt, Sie haben eine Objektklasse mit dem Namen "Parser"):
quelle
Wenn Sie eine Liste von Methoden suchen, die von einer Instanz antworten (in Ihrem Fall @current_user). Laut Dokumentation ruby Methoden
Alternativ können Sie auch überprüfen, ob eine Methode für ein Objekt aufrufbar ist oder nicht.
Wenn Sie keine übergeordneten Klassenmethoden möchten, subtrahieren Sie einfach die übergeordneten Klassenmethoden davon.
quelle