2016-03-21 15 views
-1

ich ein Modell haben unter Company NamespaceAufruf Foo :: Bar von Bar :: BazController

class Company::Employee 

Ich habe einen Controller für die Profile meiner Mitarbeiter, unter Namespaces Employee

class Employee::ProfilesController < EmployeeController 

I gesetzt @employee in diesem Controller

@employee = Company::Employee.find(...) 

Aber ich habe den Fehler

nicht definierte Methode `finden‘ für Mitarbeiter: Modul

Es scheint, dass Company::Employee zum Employee Modul behoben ist, die Employee::ProfilesController hostet.

Wenn ich dort byebug, habe ich eine zusätzliche Nachricht warning: toplevel constant Employee referenced by Company::Employee. Wie könnte ein Controller-Modul von einer Modellklasse referenziert werden?

Ich versuchte einige Sachen einschließlich ::Company::Employee und require 'company/employee', aber nichts ändert sich.

Die betreffenden Dateien sind in

  • app/controllers/employee/profiles_controller.rb
  • app/models/company/employee.rb

Trace

NoMethodError (undefined method `find' for Employee:Module): 

app/controllers/employee/profiles_controller.rb:30:in `set_company_employee' 
    Rendered C:/dev/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.beta3/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (7.0ms) 
    Rendered C:/dev/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.beta3/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (4.5ms) 
    Rendered C:/dev/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.beta3/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1. 
0ms) 
    Rendered C:/dev/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.beta3/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescue 
s/layout (2726.3ms) 
    Rendered C:/dev/Ruby22-x64/lib/ruby/gems/2.2.0/gems/web-console-3.1.1/lib/web_console/templates/_markup.html.erb (0.5ms) 
    Rendered C:/dev/Ruby22-x64/lib/ruby/gems/2.2.0/gems/web-console-3.1.1/lib/web_console/templates/_inner_console_markup.html.erb within layouts/inlined_string (
1.0ms) 
    Rendered C:/dev/Ruby22-x64/lib/ruby/gems/2.2.0/gems/web-console-3.1.1/lib/web_console/templates/_prompt_box_markup.html.erb within layouts/inlined_string (0.5 
ms) 
    Rendered C:/dev/Ruby22-x64/lib/ruby/gems/2.2.0/gems/web-console-3.1.1/lib/web_console/templates/style.css.erb within layouts/inlined_string (0.5ms) 
    Rendered C:/dev/Ruby22-x64/lib/ruby/gems/2.2.0/gems/web-console-3.1.1/lib/web_console/templates/console.js.erb within layouts/javascript (2507.8ms) 
    Rendered C:/dev/Ruby22-x64/lib/ruby/gems/2.2.0/gems/web-console-3.1.1/lib/web_console/templates/main.js.erb within layouts/javascript (0.5ms) 
    Rendered C:/dev/Ruby22-x64/lib/ruby/gems/2.2.0/gems/web-console-3.1.1/lib/web_console/templates/index.html.erb (4939.1ms) 

Klassen

class Employee::ProfilesController < EmployeeController 
    before_action :set_company_employee 
    ... 

    def set_company_employee 
    if params[:employee_id] 
     # Line that throws error below : 
     @employee = (Company::Employee).find(params[:employee_id]) 
    else 
     # Many employee profiles, bad request 
     flashy_now(:error, :select_employee_profiles) 
     redirect_back 
    end 
    @company = @employee.company 
    end 

class Company::Employee < Professional 
    include Invitable 

    belongs_to :company 
    belongs_to :entity 

    delegate :name, to: :company, prefix: true 
    delegate :name, to: :entity, prefix: true, allow_nil: true 

end 

class Professional 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    include SimpleEnum::Mongoid 
    include Likeable 
    include UserProfile 
    ... 
    belongs_to :user 
    ... 

Config

  • Rubin 2.2.4p230 (2015.12.16 Revision 53155) [x64-mingw32]
  • Rails 5.0.0beta3
+0

Zeigen Sie Ihre volle Klassen und die vollständigen Fehlermeldungen mit Zeile n hinzufügen Herren. – smathy

+0

Hier gehts.Meine benutzerdefinierten Module haben höchstwahrscheinlich nichts mit dem Problem zu tun, sie fügen nur ein paar Felder und Delegation Zeug mit ActiveSupport :: Concern –

+0

Was für ein Witz, wenn ich eine Zeile davor ausführen, erfordert die gute Klasse durch eine andere Verknüpfung, wie ' First.employees.first.class', löst es tatsächlich das Problem. Jedoch hört es auf zu arbeiten, sobald ich diese Linie entferne. Wenn jemand das erklären kann ... –

Antwort

0

ich this nice article gefunden haben, die erklärt, wie das automatische Laden kann ein Durcheinander sein.

Ich bin immer noch nicht sicher, warum dieser Fehler in meinem speziellen Fall passiert, aber einige der Kommentare, wies darauf hin, dass require_dependency mir helfen könnte, und es tat:

Nach Hinzufügen dieser zwei Linien auf meinem Company::Employee Controller scheint alles

(Beachten Sie, dass ich auch wirklich benötigt adaequat die zweite oder würde ich bekommen ein NoMethodError (undefined method 'where' for Company:Class):

# app/controllers/company/profiles_controller.rb 
require_dependency "company/employee.rb" 
require_dependency "company.rb" 
Verwandte Themen