2010-09-03 10 views
9

Je dispose d'un fichier contenant un quelque chose de classe aide comme ceci:erreur de routage: constante non initialisée dans Rails 3

app/classes/myfile.rb

Module mymodule 
    class myclass 
    # blah blah 
    end 
end 

Je veux utiliser cette classe dans un contrôleur , donc je l'ai écrit quelque chose comme ceci:

require 'myfile' 

class MyController < ApplicationController 

    include mymodule 

    def index 
    mymodule::myclass.new 
    end 

end 

la route pour le contrôleur est défini comme suit:

match 'mycontroller', :to => 'mycontroller#index' 

Maintenant, pour le comportement étrange que je suis confronté. Cela fonctionne parfaitement lors de la première exécution après le démarrage du serveur. Mais lorsque j'actualise la page ou que j'appuie à nouveau sur l'URL, j'obtiens l'erreur suivante.

Routing Error 

uninitialized constant MyController::mymodule 

Je ne peux pas faire quoi que ce soit de l'erreur, et je ne peux comprendre pourquoi cela ne fonctionne pas à partir du deuxième coup en avant seulement. Que ce passe-t-il?

Répondre

2

J'ai changé require 'myfile' pour charger 'myfile.rb' et ça marche maintenant très bien. Je ne sais pas si j'ai résolu le problème. Je ne sais pas ce qui se passe. Quelqu'un peut-il m'éclairer?

8

D'une manière générale, Rails aime voir les fichiers contenant:

module MyModule 

nommé my_module.rb

Les modules sont généralement capitalisés

En outre, il pense que MyModule est scope dans la classe MyController, qu'il n'est pas. Vous pouvez essayer

include ::MyModule 

pour y accéder à partir de la portée de niveau supérieur. Je ne sais pas non plus si vos chemins de chargement incluent votre répertoire de classes, donc il n'est probablement pas en train de charger automatiquement le fichier myfile.rb en premier lieu.

Questions connexes