Ruby on rails “未初始化常量”;“控制器名称”;

Ruby on rails “未初始化常量”;“控制器名称”;,ruby-on-rails,ruby,ruby-on-rails-3.2,Ruby On Rails,Ruby,Ruby On Rails 3.2,我的路由/资源和控制器出现错误 我在routes.rb中有以下内容: # routes.rb resources :users do resource :schedule end 我在控制器/用户/设置中有一个schedule_controller.rb,我认为它应该是: class Users::ScheduleController < ApplicationController # Controller methods here... end 但是,导航到/us

我的路由/资源和控制器出现错误

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

# routes.rb
resources :users do  
  resource :schedule  
end
我在控制器/用户/设置中有一个schedule_controller.rb,我认为它应该是:

class Users::ScheduleController < ApplicationController

  # Controller methods here...

end
但是,导航到/users/:user_id/schedule返回以下错误:

uninitialized constant SchedulesController
我对问题的唯一看法是,它与嵌套资源或声明单个资源有关,我在某个地方出错了

我在用助手

new_user_schedule_path(current_user)

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

日程安排控制器的名称空间是故意的吗?i、 你真的想这么做吗

class Users::SchedulesController < ApplicationController

将生成的所有内容保持原样。

它应该是
SchedulesController
,而不是
Users::SchedulesController
。仅当路由为空时,控制器才应具有名称空间。控制器名称也应始终为复数


您正在创建的是一个,而不是名称空间。

替换资源:用户到 名称空间:用户

因为您的计划控制器位于users文件夹中。 类用户::ScheduleController在routes.rb中结束

,您需要像这样指定控制器:

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

请注意ScheduleController不是ScheduleSontroller。我在搜索标题中的错误时发现了这个问题,但没有嵌套vs命名空间资源问题。在我的情况下,控制器文件未放在正确的文件夹中。在我的情况下,控制器文件名的格式不正确。文件名应为“schedules_controller.rb”。中的单数资源示例具有复数类名,因此我认为Andrew是对的,并且您的控制器名称应为复数。有时复数是错误的,尤其是对于复数或复合词。在这种情况下,您可以更改definctions.rb文件,以便rails查找“复数”。谢谢您的回答。我确实混淆了嵌套资源和名称空间。此外,使用单一的“时间表”也会造成问题。这应该是公认的答案,因为最初的请求似乎是为了嵌套资源,而不是命名空间资源。如果您没有像这里所做的那样在嵌套资源中指定控制器,您将收到原始海报遇到的错误。
namespace :users do
  resources :schedules
end
resources :users do
  resource :schedules, controller: 'users/schedules'
end