未初始化的常量“控制器名称”(Uninitialized constant “Controller

2019-07-03 10:06发布

我有我的路线/资源和控制器错误。

我在routes.rb中的以下内容:

# routes.rb
resources :users do  
  resource :schedule  
end

我有内部控制器/用户/套起,因为我认为它应该是一个schedule_controller.rb:

class Users::ScheduleController < ApplicationController

  # Controller methods here...

end

运行耙:路线节目

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

然而,导航到/用户/:USER_ID /日程返回以下错误:

uninitialized constant SchedulesController

我的问题可能是只什么想法是,就是有事情做与嵌套的资源或宣布一个单一的资源,我要去什么地方错了。

我使用的帮手

new_user_schedule_path(current_user)

链接到我的“新”的视图时。

Answer 1:

它应该是SchedulesController ,而不是Users::ScheduleController 。 当路由控制器只应命名空间与命名空间namespace 。 控制器名称也应该永远是复数。

什么你要创建一个嵌套的资源 ,而不是一个名称空间的一个。



Answer 2:

是的命名空间SchedulesController故意的吗? 即你真的要做到这一点?

class Users::SchedulesController < ApplicationController

或者,你只是这样做,因为时间表“子事”,从用户?

我问这个的原因是因为通常在Rails中,嵌套的资源控制器没有命名空间。 如果你想修改控制器在一个命名空间下一种特殊的方式,你只会命名空间的控制器。 一个常见的例子是具有某些控制器管理员命名空间下,从一个继承BaseController该命名空间,将来自acessing那些控制器仅限制管理员内。

选项1

如果没有故意命名空间此控制器,那么你要删除的Users::从你的控制器的前缀,而将其移回到app/controllers/schedules_controller.rb ,佣工回到app/helpers/schedules_helper.rb和意见回到app/views/schedules 。 也许你跑这也产生了一个发电机Users::Schedule模型,这也应该需要重命名为Schedule搬回app/models/schedule.rb

选项2

如果你是故意命名空间此控制器,那么你要做到这一点在你的路线:

namespace :users do
  resources :schedules
end

离开一个已经生成的,它应该是一切。



Answer 3:

在你的routes.rb你需要指定这样的控制器:

resources :users do resource :schedules, controller: 'users/shedules' end



Answer 4:

替代资源:用户命名空间:用户

因为你的日程安排控制器内部的用户文件夹。 类用户::这里ScheduleController <#ApplicationController的控制器方法...结束



文章来源: Uninitialized constant “Controller Name”