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
Zeigen Sie Ihre volle Klassen und die vollständigen Fehlermeldungen mit Zeile n hinzufügen Herren. – smathy
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 –
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 ... –