2010-07-04 4 views
9

Jedesmal, erhalte ich eine Warnung:Rails3: Warnung: Toplevel Konstante Application referenzierten von

app/controllers/agency/agencies_controller.rb:1: warning: toplevel constant ApplicationController referenced by Agency::ApplicationController 

Mein agencies_controller.rb:

class Agency::AgenciesController < Agency::ApplicationController 

    def index 
    ... 
    end 

    ... 
end 

Und Agentur :: Application:

class Agency::ApplicationController < ApplicationController 
    layout 'agency' 

    helper_method :current_agency 
    private 

    def current_agency 
    @current_agency ||= current_user.agency 
    end 

end 

Was die Schienen von mir wollen? Was ist das Problem?

Gleiche Situation mit einem anderen Controller

class Agency::ClientsController < Agency::ApplicationController 
    ... 
end 

und es werden keine Warnungen, keine Fehler ...

Antwort

5

ApplicationController ist der Name des Super Controller, Rails generiert für Sie, wenn Sie ein neues Projekt erstellen, das alle Ihre anderen Controller-Klassen erben von. Es ist wahrscheinlich irgendwo ein Konflikt, weil Sie den gleichen Namen verwendet haben, obwohl Sie es in einen Namespace einfügen.

Versuchen Sie, Ihren Agency::ApplicationController einen anderen Namen zu geben.

+0

Aber warum gibt es keine Probleme mit der Agentur :: ClientsController ?? – petRUShka

+1

Weil 'ClientsController' für Rails keine spezielle Bedeutung hat. –

+0

Ich habe eine funktionierende Admin :: ApplicationController, die keine Probleme gibt. Umbenennen sollte nicht erforderlich sein. Es gibt wahrscheinlich Unklarheiten an anderen Stellen im Call-Stack, über die sich Ruby beschwert. –

2

Ich hatte ähnliche Probleme, nach der Einrichtung Spork und Watchr. Dabei habe ich den Klassencachespeicher (config_cache_classes => false in config/environments/test.rb) deaktiviert, damit die Änderungen in der Spork-Umgebung nach Bedarf neu geladen werden. Durch Drehen des Klassencachings wurden die Warnungen gelöscht.

7

Ich hatte ähnliche Probleme laufen Spork und Watchr in meinem Admin Namespaced Controller. Also habe ich dieses Problem behoben durch folgenden Code in each_run Block in spec_helper.rb Zugabe:

Dir[File.expand_path("app/controllers/admin/*.rb")].each do |file| 
    require file 
end 

Alle Gutschriften geht an guy from this thread

+1

Danke, dies hat das Problem gelöst. –

+1

Danke, das hat super funktioniert, ich habe es ein wenig modifiziert, um es kurz zu machen: Dir [Rails.root.join ("app/controllers/admin/*. Rb")]. Je {| f | erfordern f} –

+0

nach Stunden des Kopfschlagens .. das löste mein Problem .. gut, dass ich diese Warnung bemerkt und gut, dass ich diese Antwort fand .. vielen Dank. – whizcreed

12

Ich weiß, diese Frage ist fast zwei Jahre alt, aber ich stolperte vor kurzem auf diese durch another Stackoverflow Post und wollte einige Einblicke teilen.

Grundsätzlich, wenn Ihr Namespace Agency zufällig eine class anstelle von module ist, erhalten Sie diese Warnung. In dem Stackoverflow-Post, den ich oben eingefügt habe, hatten sie ein Modell (class) von Admin und ihr Namensraum war auch Admin.

This bietet eine bessere Erklärung, was passiert.

Überprüfen Sie also, ob Ihr Code irgendwo eine Klasse Agency definiert. Viel Glück.

2

In meinem Fall war es das Problem mit Devise. Ich hatte ein Modell-Admin und einen Namespace-Administrator. Durch Ändern der Namespace-Route zu Admins wurde das Problem behoben.

0

Lösung für mich war diese Zeile hinzu:

# spec/rails_helper.rb 
Dir[File.expand_path("app/controllers/admin/*.rb")].each { |file| require file } 
Verwandte Themen