2011-08-30 1 views
8
Ap::Application.routes.draw do 
    resources :accounts 
end 

Je souhaite connaître la classe ou le module auquel appartient la méthode "resources". Si je recherche la méthode "resources" dans http://apidock.com/rails/ (dans la zone de texte de recherche fournie), une liste de classes apparaît avec le nom de méthode "resources". Confus, en connaissant l'origine de la méthode.Déterminer la classe à laquelle appartient une méthode dans les rails

Est-ce que leur toute commande que je peux utiliser dans les puts pour voir l'origine.

La question est un peu de niveau débutant.

Merci

+0

Pas du tout une question débutant. Rails cache beaucoup de ses internes - mais la raison générale est que vous n'avez généralement pas besoin de savoir. – Chowlett

Répondre

2

Ruby est un langage orienté objet. Et alors que les méthodes ne sont pas les objets Ruby, vous pouvez demander à Ruby pour vous donner un objet Method représentant la méthode en question, et vous pouvez simplement dire que Method pour vous donner son propriétaire:

Ap::Application.routes.draw do 
    p method(:resources).owner 
end 
6

plus éclairante que la recherche de resources est à la recherche draw, puisque cette méthode doit faire quelque chose avec le bloc transmis.

En effet, nous trouvons le code source pour draw, ce qui montre que la bloc est fourni exécuté dans le cadre d'un Mapper, qui include s Resources qui (enfin!) définit resources

+0

Il convient également de noter que les résultats de recherche pour 'resources' comprennent deux classes (les noms commencent par le capital) et trois méthodes; l'une des méthodes est représentée par> = v1.2.0 <= v2.3.8, donc elle est obsolète, et l'une est membre de 'DeprecatedMapper', suggérant que c'est aussi le cas. – Chowlett

+0

Beaucoup de Rails sont divisés en modules, ce qui est génial pour organiser la source mais rend la documentation plutôt fragmentée. Ce serait bien s'il y avait une meilleure façon de le faire. – tadman

+0

Merci Chowlett. J'ai été capable de trouver le module 'ActionDispatch :: Routing :: Mapper :: Resources' où la méthode des ressources est définie en suivant vos étapes. Je ne suis pas sûr de pouvoir appliquer cette méthode pour toutes les méthodes. désolé que stackoverflow ne permette qu'une seule réponse soit marquée comme correcte. Mais assurez-vous d'un vote. :-) Merci encore pour votre aide. – rajkamal

0

On suppose que current_user est une instance de classe User, vous pouvez appeler la fonction method pour vérifier si method_name appartient à la classe User. Exemple

current_user.method(:method_name).owner 
User.method(:method_name).owner 

Espérons que cela vous aide!

Questions connexes