加载视图时出现 "Uninitialized constant" 路由错误
Getting "Uninitialized constant" routing error when loading a view
我是 ruby 和 rails 的初学者,并且使用 Rails 5.17
为 class.
开发网络应用程序
创建空 Rails 项目成功,但在创建新控制器时出现问题。我从项目的根目录生成了一个名为 cars
的新控制器,这是成功的。 app/controllers 中有一个名为 cars_controller.rb
的文件,如下所示:
class CarsController < ApplicationController
end
我向这个名为 hello
的文件添加了一个什么都不做的方法。
然后我在 app/views/layouts
目录中创建了一个名为 cars.html.erb
的文件。此文件是html代码的基本页面。
在config/routes.rb
中,我添加了以下内容:
get '/cars', to:: 'cars_controller#hello'
resources: cars
完成所有这些后,我 运行 rails server
,并在浏览器中打开了 localhost:3000
。这会在 Rails 欢迎页面上显示正常的 Ruby。
但是当我转到 localhost:3000/cars
时,我得到以下信息:
Routing Error
uninitialized constant CarsControllerController
我试过更改 cars_controller.rb
文件的名称。我尝试将控制器文件中 class 的名称从 CarsController
更改为 Cars
。我在 routes.rb
尝试过许多不同的路线。我终于尝试卸载 Rails 5.17
并安装 Rails 5.13
.
我很困惑,如果能得到任何建议,我将不胜感激。提前致谢!
我认为您定义路线的方式有误 - 您不需要 _controller
。
相反,试试这个:
get '/cars', to: 'cars#hello'
此外,请记住,在您的 cars
目录中,您需要以下视图:hello.html.erb
Rails 的一大优点是它对约定优于配置的偏好。然而,为了真正让您受益,您需要尽可能坚持“Rails 方式”而不是您自己的方式。
在这种情况下,首先摆脱您的自定义 get
路由,然后只使用 resources :cars
.
从命令行,运行 rake routes
(您也可以在 rails 版本上 运行 rails routes
)并查看路线它为您创建的。
现在,将您添加到 CarsController
的方法从 hello
重命名为 index
。
将您的 hello.html.erb
文件从 app/views/layout
移动到 app/views/cars/index.html.erb
。
最后,启动 rails 服务器 (rails start
) 并在浏览器中加载 url http://localhost:3000/cars
。
——
请注意 app/views/layout
中的模板有特殊用途。这些用于将通用模板应用于您的视图。查看控制器中 layout
的使用以获取更多详细信息
我是 ruby 和 rails 的初学者,并且使用 Rails 5.17
为 class.
创建空 Rails 项目成功,但在创建新控制器时出现问题。我从项目的根目录生成了一个名为 cars
的新控制器,这是成功的。 app/controllers 中有一个名为 cars_controller.rb
的文件,如下所示:
class CarsController < ApplicationController
end
我向这个名为 hello
的文件添加了一个什么都不做的方法。
然后我在 app/views/layouts
目录中创建了一个名为 cars.html.erb
的文件。此文件是html代码的基本页面。
在config/routes.rb
中,我添加了以下内容:
get '/cars', to:: 'cars_controller#hello'
resources: cars
完成所有这些后,我 运行 rails server
,并在浏览器中打开了 localhost:3000
。这会在 Rails 欢迎页面上显示正常的 Ruby。
但是当我转到 localhost:3000/cars
时,我得到以下信息:
Routing Error
uninitialized constant CarsControllerController
我试过更改 cars_controller.rb
文件的名称。我尝试将控制器文件中 class 的名称从 CarsController
更改为 Cars
。我在 routes.rb
尝试过许多不同的路线。我终于尝试卸载 Rails 5.17
并安装 Rails 5.13
.
我很困惑,如果能得到任何建议,我将不胜感激。提前致谢!
我认为您定义路线的方式有误 - 您不需要 _controller
。
相反,试试这个:
get '/cars', to: 'cars#hello'
此外,请记住,在您的 cars
目录中,您需要以下视图:hello.html.erb
Rails 的一大优点是它对约定优于配置的偏好。然而,为了真正让您受益,您需要尽可能坚持“Rails 方式”而不是您自己的方式。
在这种情况下,首先摆脱您的自定义 get
路由,然后只使用 resources :cars
.
从命令行,运行 rake routes
(您也可以在 rails 版本上 运行 rails routes
)并查看路线它为您创建的。
现在,将您添加到 CarsController
的方法从 hello
重命名为 index
。
将您的 hello.html.erb
文件从 app/views/layout
移动到 app/views/cars/index.html.erb
。
最后,启动 rails 服务器 (rails start
) 并在浏览器中加载 url http://localhost:3000/cars
。
——
请注意 app/views/layout
中的模板有特殊用途。这些用于将通用模板应用于您的视图。查看控制器中 layout
的使用以获取更多详细信息