我有一个名为Organization
的模型。它在app/models/organization.rb
Rails 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
的模型?
只是为了澄清,当你说“的代码休息”,你的意思是你看到当您尝试启动应用程序或调用'ActivitiesController#index'方法时出错? – seddy
执行'ActivitiesController#index'动作时会中断。我更新了这个问题。 – CodeSmith