2016-03-21 212 views
-1

我有一个模型下Company调用foo ::酒吧从酒吧:: BazController

class Company::Employee 

我对我的员工的轮廓控制器命名空间,Employee

class Employee::ProfilesController < EmployeeController 

我设置的命名空间下@employee在那个控制器里

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

但是我有错误

未定义的方法`发现”的员工:模块

似乎Company::Employee解析为承载Employee::ProfilesControllerEmployee模块。

当我在byebug那里,我有一个额外的消息warning: toplevel constant Employee referenced by Company::Employee。模型类如何引用控制器模块?

我尝试了一些东西,包括::Company::Employeerequire 'company/employee',但没有任何变化。

有问题的文件是在

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

跟踪

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) 

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 
    ... 

配置

  • 红宝石2.2.4p230(2015年12月16日修订版53155)[x64的的mingw32]
  • 滑轨5.0.0beta3解释如何自动加载
+0

显示完整的类和与第n行的全部错误信息umbers。 – smathy

+0

在这里,你去。我的自定义模块很可能与问题无关,他们只是添加一些字段和委托的东西与ActiveSupport :: Concern –

+0

什么玩笑,如果我之前执行一行,需要好的类通过其他协会,如' Company.first.employees.first.class',它实际上解决了这个问题。但是,只要我删除此行,它就会停止工作。如果任何人都可以解释... –

回答

0

我发现this nice article可以是一团糟。

我仍然不知道为什么这个错误在我的特定情况下发生,但一些评论人士指出,require_dependency可以帮助我和它没有:

Company::Employee控制器的顶部添加这些2行后,一切似乎是工作的罚款

(请注意,我也很需要添加第二个或我会得到一个NoMethodError (undefined method 'where' for Company:Class):

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