加载视图时出现 "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 的使用以获取更多详细信息