Cod*_*ith 6 ruby-on-rails rails-routing ruby-on-rails-4
我有一个名为的模型Organization.它的定义是app/models/organization.rb
class Organization < ActiveRecord::Base
... code
end
Run Code Online (Sandbox Code Playgroud)
我有一个名为的控制器Admin::Organization::ActivitiesController.它的定义是app/controllers/admin/organization/activities_controller.rb.它有一个索引动作.
class Admin::Organization::ActivitiesController < ApplicationController
def index
@organization = Organization.new
... more code
end
end
Run Code Online (Sandbox Code Playgroud)
执行上面的索引操作时,我收到以下消息:
NameError in Admin::Organization::ActivitiesController#index
uninitialized constant Admin::Organization::ActivitiesController::Organization
Run Code Online (Sandbox Code Playgroud)
由于某种原因,它在控制器类中确定了组织模型.如果我改变使用index方法
@organization = ::Organization.new
Run Code Online (Sandbox Code Playgroud)
然后它工作正常.
此行为似乎没有出现在pry控制台中.如果我binding.pry在索引方法中添加一个调用,那么我可以调用Organization.new或::Organization.new从命令行调用它可以正常工作.
应用程序中的每个其他模型都能正常工作,并且没有这种奇怪的行为.我最初没有写代码,所以我想弄清楚发生了什么.
我认为它可能与routes.rb文件中的命名空间有关.有一个使用该organization单词的命名空间.
namespace :admin do
namespace :organization
resources :activities
end
end
Run Code Online (Sandbox Code Playgroud)
作为测试,我将命名空间更改为:organizations,并且我能够在不需要的情况下使用它::.有没有办法构建事物或路由设置,所以我们可以有一个名称空间:organization,不会干扰名为的模型Organization?
如果您只想使路径正确,则不需要将活动控制器放在admin/organization命名空间文件夹下。另一种选择是使用范围而不是名称空间。
# app/controllers/activities_controller.rb
class ActivitiesController < ApplicationController
def index
@organization = Organization.new
... more code
end
end
Run Code Online (Sandbox Code Playgroud)
现在配置路由,
# config/routes.rb
scope 'admin/organization', path: 'admin/organization' do
resources :activities
end
Run Code Online (Sandbox Code Playgroud)
这将产生这样的路线,
Prefix Verb URI Pattern Controller#Action
activities GET /admin/organization/activities(.:format) activities#index
POST /admin/organization/activities(.:format) activities#create
......
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
733 次 |
| 最近记录: |