2015-10-12 22 views
5

我有一个名为Organization的模型。它在app/models/organization.rbRails NameError未初始化常量(模型和名称空间碰撞)

class Organization < ActiveRecord::Base 
... code 
end 

定义我有一个名为Admin::Organization::ActivitiesController控制器。它在app/controllers/admin/organization/activities_controller.rb中定义。它有一个索引操作。

class Admin::Organization::ActivitiesController < ApplicationController 
    def index 
    @organization = Organization.new 
    ... more code 
    end 
end 

我收到以下消息时,我执行上述指标的行动:

NameError in Admin::Organization::ActivitiesController#index 
uninitialized constant Admin::Organization::ActivitiesController::Organization 

出于某种原因,它的作用域控制器类内部的组织模式。如果我改变index方法使用

@organization = ::Organization.new 

然后它工作正常。

此行为似乎不出现在pry控制台中。如果我在索引方法中添加binding.pry调用,那么我可以在命令行中调用Organization.new::Organization.new它工作正常。

应用程序中的每个其他模型都能正常工作,并且没有这种奇怪的行为。我最初没有编写代码,所以我试图弄清楚发生了什么。

我认为它可能与route.rb文件中的命名空间有关。有一个名称空间使用organization字。

namespace :admin do 
    namespace :organization 
    resources :activities 
    end 
end 

作为测试,我改变了命名空间:organizations,我能得到的东西,而无需::工作。有没有一种方法来组织结构或路由设置,所以我们可以有一个名称空间:organization,它不会影响名为Organization的模型?

+0

只是为了澄清,当你说“的代码休息”,你的意思是你看到当您尝试启动应用程序或调用'ActivitiesController#index'方法时出错? – seddy

+0

执行'ActivitiesController#index'动作时会中断。我更新了这个问题。 – CodeSmith

回答

1

如果您只是想使路径正确,则不需要将活动控制器置于admin/organization命名空间文件夹下。另一个选择就像使用范围而不是命名空间。

# app/controllers/activities_controller.rb 
class ActivitiesController < ApplicationController 
    def index 
    @organization = Organization.new 
    ... more code 
    end 
end 

现在配置路线,

# config/routes.rb 
scope 'admin/organization', path: 'admin/organization' do 
    resources :activities 
end 

这将产生这样的路线,

Prefix Verb URI Pattern          Controller#Action 

activities GET /admin/organization/activities(.:format)  activities#index 
       POST /admin/organization/activities(.:format)  activities#create 
...... 
相关问题