Comment répertorier toutes les méthodes auxquelles un objet particulier a accès?
J'ai un @current_user
objet, défini dans le contrôleur d'application:
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
Et je veux voir les méthodes dont je dispose dans le fichier de vue. Plus précisément, je veux voir quelles méthodes une :has_many
association propose. (Je sais ce que je :has_many
dois fournir, mais je veux le vérifier.)
ruby-on-rails
ruby
Poignard
la source
la source
@current_user
?Réponses:
Ce qui suit va lister les méthodes de la classe User que la classe Object de base n'a pas ...
Notez qu'il
methods
s'agit d'une méthode pour les classes et pour les instances de classe.Voici les méthodes de ma classe User qui ne sont pas dans la classe de base ActiveRecord:
Notez que les méthodes créées à la suite des (nombreuses) relations has_many définies dans la classe User ne figurent pas dans les résultats de la
methods
appel.Ajouté Notez que: has_many n'ajoute pas directement de méthodes. Au lieu de cela, la machine ActiveRecord utilise le Ruby
method_missing
et desresponds_to
techniques pour gérer les appels de méthode à la volée. Par conséquent, les méthodes ne sont pas répertoriées dans lemethods
résultat de la méthode.la source
Module # instance_methods
la source
Ou simplement
User.methods(false)
pour ne renvoyer que les méthodes définies dans cette classe.la source
Tu peux faire
Pour une meilleure liste
la source
Qu'en est-il de l'un d'entre eux?
la source
Supposons que l'utilisateur ait de nombreux messages:
la source
Pour expliquer la réponse de @ clyfe. Vous pouvez obtenir une liste de vos méthodes d'instance à l'aide du code suivant (en supposant que vous ayez une classe d'objet nommée "Parser"):
la source
Si vous recherchez une liste de méthodes qui répondent par une instance (dans votre cas @current_user). Selon les méthodes de documentation ruby
Vous pouvez également vérifier qu'une méthode est appelable sur un objet ou non ?.
Si vous ne voulez pas de méthodes de classe parente, soustrayez simplement les méthodes de classe parente.
la source