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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top