Ada*_*dam 15 ruby ruby-on-rails ruby-on-rails-3.2
我的路由/资源和控制器出错了.
我在routes.rb中有以下内容:
# routes.rb
resources :users do
resource :schedule
end
Run Code Online (Sandbox Code Playgroud)
我在控制器/用户/内部设置了schedule_controller.rb,因为我认为它应该是:
class Users::ScheduleController < ApplicationController
# Controller methods here...
end
Run Code Online (Sandbox Code Playgroud)
运行rake:路线显示
user_schedule POST /users/:user_id/schedule(.:format) schedules#create
new_user_schedule GET /users/:user_id/schedule/new(.:format) schedules#new
edit_user_schedule GET /users/:user_id/schedule/edit(.:format) schedules#edit
GET /users/:user_id/schedule(.:format) schedules#show
PUT /users/:user_id/schedule(.:format) schedules#update
Run Code Online (Sandbox Code Playgroud)
但是,导航到/ users /:user_id/schedule会返回以下错误:
uninitialized constant SchedulesController
Run Code Online (Sandbox Code Playgroud)
我的问题可能是只什么想法是,就是有事情做与嵌套的资源或宣布一个单一的资源,我要去什么地方错了.
我正在使用帮手
new_user_schedule_path(current_user)
Run Code Online (Sandbox Code Playgroud)
链接到我的"新"视图时.
And*_*all 16
它应该是SchedulesController
,而不是Users::ScheduleController
.控制器只应在路由器命名namespace
空间时进行命名空间.控制器名称也应始终为复数.
命名空间是SchedulesController
有意的吗?即你真的要这样做吗?
class Users::SchedulesController < ApplicationController
Run Code Online (Sandbox Code Playgroud)
或者你这样做只是因为时间表是用户的“子事物”?
我问这个的原因是因为通常在 Rails 中,嵌套的资源控制器没有命名空间。如果您想在命名空间下以特殊方式修改控制器,则只能命名控制器。一个常见的例子是在 admin 命名空间下有一些控制器,从BaseController
该命名空间中的a 继承,这将限制只有管理员访问这些控制器。
如果您没有故意命名此控制器,那么您希望Users::
从控制器中删除前缀,并将其移回app/controllers/schedules_controller.rb
,将助手移回app/helpers/schedules_helper.rb
,将视图移回app/views/schedules
。也许您运行了一个生成器,该生成器也生成了一个Users::Schedule
模型,该模型也应该重命名Schedule
并移回app/models/schedule.rb
.
如果你故意命名这个控制器,那么你想在你的路由中这样做:
namespace :users do
resources :schedules
end
Run Code Online (Sandbox Code Playgroud)
保留已生成的所有内容。
在你的routes.rb中,你需要像这样指定控制器:
resources :users do
resource :schedules, controller: 'users/schedules'
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
54920 次 |
最近记录: |