Lorsque sont des modules inclus dans une classe Ruby en cours d'exécution dans des rails?
-
30-09-2019 - |
Question
Je suis en train d'écrire une méthode qui me dit chaque classe qui comprend un module particulier. Il ressemble à ceci -
def Rating.rateable_objects
rateable_objects = []
ObjectSpace.each_object(Class) do |c|
next unless c.include? Rateable
rateable_objects << c
end
rateable_objects
end
Où « Revenu cadastral » est mon module que je suis compris dans plusieurs modèles.
Qu'est-ce que je trouve que ce retour de la méthode [] si je l'appelle immédiatement après le démarrage des rails console ou l'exécution du serveur. Mais si je suis instancier une instance de l'un des modèles consommant il retournera ce modèle dans le résultat.
Alors, quand les modules ne paraissent-ils? Je devine que plus tard dans le processus que quand il commence l'application vers le haut. Si je ne peux pas obtenir cette information de cette façon au début du processus, est de toute façon d'y arriver?
La solution
Ils sont inclus lorsque l'instruction include est exécutée lorsque la classe est définie. Rails modules / classes quand charge automatiquement vous devez d'abord les utiliser. , Vous pouvez également essayer quelque chose comme ceci:
module Rateable
@rateable_object = []
def self.included(klass)
@rateable_objects << klass
end
def rateable_objects
@rateable_objects
end
end
Ceci établira la liste en tant que classes comprennent le module.