Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 Rails:不带动作和视图的控制器会给出错误,但不带动作和视图的控制器不会_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 4 Rails:不带动作和视图的控制器会给出错误,但不带动作和视图的控制器不会

Ruby on rails 4 Rails:不带动作和视图的控制器会给出错误,但不带动作和视图的控制器不会,ruby-on-rails-4,Ruby On Rails 4,我生成了一个控制器,没有使用命令执行操作 rails g controller tests 将路由添加为resources:tests 我尝试访问页面{localhost}/tests/new,并获取错误无法为TestsController找到新操作,这是正确的,因为我没有包含该操作 现在,如果我包含该操作,我将得到一个不同的错误,即模板丢失,当我包含所需的模板时,该错误将得到解决,应用程序工作正常 但是,如果我没有包含操作,而是直接添加了所需的模板new,那么即使我没有包含操作,我的错误Te

我生成了一个控制器,没有使用命令执行操作

rails g controller tests
将路由添加为
resources:tests

我尝试访问页面
{localhost}/tests/new
,并获取错误
无法为TestsController找到新操作,这是正确的,因为我没有包含该操作

现在,如果我包含该操作,我将得到一个不同的错误,即
模板丢失
,当我包含所需的模板时,该错误将得到解决,应用程序工作正常

但是,如果我没有包含操作,而是直接添加了所需的模板
new
,那么即使我没有包含操作,我的错误
TestsController的新操作仍然无法找到。这在Rails中是如何工作的?这项行动不是强制性的吗?Rails是如何解决我在这种情况下的错误的?

如果您在添加控制器操作后执行了测试,那么Rails仍然可以缓存路由并呈现视图,甚至可以从缓存中呈现视图。

您已经听到了“约定优先于配置”这句话,这就是本例中发生的情况。请记住,您的所有控制器都继承了许多方法和行为,作为Rails开发人员,您需要了解这些方法和行为,但不能直接看到它们;最明显的行为是,在使用与请求的URL操作相同的名称运行控制器方法后,Rails将查找与该操作同名的视图页面。(除非已明确使用“渲染”命令更改此行为。)

事实上,即使控制器没有匹配的方法,Rails也会执行上述操作。它只是耸耸肩,寻找具有相同名称的视图模板

以下是Rails逻辑的大致轮廓:

  • 我收到了一个“/测试/新建”的请求。我有去那里的路线吗?让我查一下路由文件
  • 我找到了一个匹配的路由,它指向控制器“test”和操作“new”
  • 我有一个名为“TestController”的控制器吗?是的,我找到了
  • 该控制器是否有名为“new”的操作?不,我看不到,但我想这不是问题,我将只查找默认视图
  • 路径“/app/views/test/new”处是否有视图?是的,我看到一个,所以我将准备该模板并将其发送回用户
  • 看起来有些回答者被多元化问题所困扰,但即使你解决了这些问题,你也应该看到你描述的行为