2016-05-26 1 views
0

Ayant modèle Prix (modèles/price.rb)Rails même nom de fichier pour les classes différentes

class Price 
end 

également dans le répertoire lib je import/détecteur/fichier price.rb

class Import::Detector::Price 
end 

annuaire Lib ajouté aux chemins autoload via

config.autoload_paths += Dir["#{config.root}/lib/**/"] 

Il faut donc lancer Price.new j'obtiens l'erreur

Impossible de charger automatiquement la constante Price, attendue lib/import/detector/price.rb pour la définir.

Importation :: :: Detector Price.new est ok

Quelle était mon erreur?

UPD. Le plus intéressant

également avoir ce modèle de fichier/voiture/location/price.rb

class Car::Property::Price 
end 

Et tout va bien avec elle. Voiture :: Propriété :: Prix est disponible.

+0

ce qui est la sortie si vous faites ceci: '$ rails r « met ActiveSupport :: Dependencies.autoload_paths'' – uday

+0

lib et tout ce qui (liste longue) + http://pastebin.com/MwjYm7bH – Roger

+0

Je ne vois pas de répertoire lib dans la sortie que vous avez collée, êtes-vous sûr d'avoir le répertoire lib répertorié ici? Voir ma réponse et laissez-moi savoir si cela a fonctionné. – uday

Répondre

1

Essayez

config.autoload_paths += Dir["#{config.root}/lib"] 

au lieu de

config.autoload_paths += Dir["#{config.root}/lib/**/"] 

Utiliser **, Dir retournera tous les répertoires sous lib et les mettre tous (comme les répertoires racine) dans le chemin de charge. Il ne devrait s'agir que du répertoire lib principal dans le chemin de chargement car les rails travailleront sur les sous-répertoires en utilisant l'espace de noms.

Rails autoloading — how it works, and when it doesn't

+0

Merci. Qui aide. Mais maintenant quelque chose d'étrange arrive. J'appelle Price.new - c'est bon. Mais alors j'appelle Import :: Detector :: Price.new et j'obtiens cet avertissement: toplevel constant Prix référencé par Import :: Detector :: Price. Et au lieu de l'instance de Import :: Detector :: Price j'obtiens l'instance de ma classe de prix. – Roger

+0

Dans 'Import :: Detector :: Price', faites-vous référence à' Price'? Pourriez-vous fournir le contenu de 'Import :: Detector :: Price' en particulier où' Price' est mentionné? – Rob

+0

Il n'y a aucune mention de classe de prix dans Import :: Detector :: Price parce que la classe de prix a été créée seulement aujourd'hui. J'utilise mon Import :: Detector :: Price depuis plusieurs mois et n'ai aucun problème jusqu'à aujourd'hui. Voici mon Import :: Detector :: Price http://pastebin.com/DHaaMcwi. Il a seulement mention de Car :: Property :: Price class, mais il n'y a pas de problème. Import :: Detector n'a aucune mention de Price. Et encore une chose à dire. Je n'ai cet avertissement que si j'instancie Price.new, puis j'appelle Import :: Detector :: Price.new. Si j'appelle Import :: Detector :: Price.new d'abord - il n'y a aucun avertissement. – Roger