Rails - 使用命名空间控制器来组织文件

时间:2016-10-18 02:44:31

标签: ruby-on-rails ruby routes namespaces

我正在尝试了解命名空间。

我之前曾就此主题提出过几个问题,但我不明白发生了什么。

我在控制器的文件夹中创建了一个名为' features'的文件夹。在其中,我保存了一个名为app_roles_controller.rb的文件。

该控制器的第一行是:

class Features::AppRolesController < ApplicationController

功能文件夹的目的是让我可以更好地整理文件(就是这样)。

在我的routes.rb中,我尝试过:

resources :app_roles, :namespace => "features", :controller => "app_roles"

我也尝试过:

namespace :features do
  resources :app_roles 
end

我有一个名为app_role.rb的模型(顶层),我有一个视图文件夹保存为views / features / app_roles,然后在其中包含索引,显示等文件。我的架构中的表名为&#39; app_roles&#34;。

当我为app_roles设置路线时,我得到:

Paths Containing (app_role):
app_roles_path  GET /app_roles(.:format)    
app_roles#index {:namespace=>"features"}

POST    /app_roles(.:format)    
app_roles#create {:namespace=>"features"}

new_app_role_path   GET /app_roles/new(.:format)    
app_roles#new {:namespace=>"features"}

edit_app_role_path  GET /app_roles/:id/edit(.:format)   
app_roles#edit {:namespace=>"features"}

app_role_path   GET /app_roles/:id(.:format)    
app_roles#show {:namespace=>"features"}

PATCH   /app_roles/:id(.:format)    
app_roles#update {:namespace=>"features"}

PUT /app_roles/:id(.:format)    
app_roles#update {:namespace=>"features"}

DELETE  /app_roles/:id(.:format)    
app_roles#destroy {:namespace=>"features"}

我无法理解我做错了什么。

当我尝试:

http://localhost:3000/app_roles#index

我收到错误消息:

uninitialized constant AppRolesController

当我尝试:

http://localhost:3000/features/app_roles#index

我收到错误消息:

No route matches [GET] "/features/app_roles"

我正在寻找一个简单的英语解释,说明如何设置它。我已经尝试过编程ruby书(好几次)。

请您帮我理解在我的rails应用程序中引入组织文件需要做些什么?

1 个答案:

答案 0 :(得分:0)

看起来你的其他尝试实际上是正确的。 As outlined in the Rails documentation,如果要为命名空间app_roles下的资源features生成路由,可以将以下内容添加到routes.rb文件中:

namespace :features do
  resources :app_roles
end

现在,您运行rake routes,您会看到以下内容:

                Prefix Verb   URI Pattern                            Controller#Action
    features_app_roles GET    /features/app_roles(.:format)          features/app_roles#index
                       POST   /features/app_roles(.:format)          features/app_roles#create
 new_features_app_role GET    /features/app_roles/new(.:format)      features/app_roles#new
edit_features_app_role GET    /features/app_roles/:id/edit(.:format) features/app_roles#edit
     features_app_role GET    /features/app_roles/:id(.:format)      features/app_roles#show
                       PATCH  /features/app_roles/:id(.:format)      features/app_roles#update
                       PUT    /features/app_roles/:id(.:format)      features/app_roles#update
                       DELETE /features/app_roles/:id(.:format)      features/app_roles#destroy

例如,第一行表示如果您向/features/app_roles发出GET请求,则会将其路由到index控制器中的features/app_roles操作。

换句话说,如果您访问http://localhost:3000/features/app_roles,它会将请求发送到位于index的{​​{1}}操作,该操作预计会有类app/controllers/features/app_roles_controller.rb。< / p>

因此,您的Features::AppRolesController文件应如下所示:

app/controllers/features/app_roles_controller.rb