我有一个名为Organization
的模型。它在app/models/organization.rb
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
它可以正常工作。
应用程序中的每个其他模型都能正常工作,并且没有这种奇怪的行为。我原本没有编写代码,所以我试图弄清楚发生了什么。
我认为它可能与routes.rb文件中的命名空间有关。有一个使用organization
字的命名空间。
namespace :admin do
namespace :organization
resources :activities
end
end
作为测试,我将命名空间更改为:organizations
,并且我能够在不需要::
的情况下完成工作。有没有办法构建事物或路由设置,所以我们可以有:organization
的名称空间不会干扰名为Organization
的模型?
答案 0 :(得分: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
......