Rails:没有操作且没有视图的控制器会出现错误但控制器没有操作且视图不存在

时间:2014-01-13 16:10:36

标签: ruby-on-rails-4

我使用命令

生成了一个没有动作的控制器
rails g controller tests

将路线添加为resources :tests

我尝试访问该网页{localhost}/tests/new并收到错误The action new could not be found for TestsController这是正确的,因为我没有包含该操作。

现在,如果我包含该操作,我将收到与Template missing不同的错误,并且当我包含所需的模板时,错误将被解析并且应用程序正常工作。

但是,如果不是直接添加所需的模板new而不包括操作,即使我没有包含操作,仍然会解析我的错误The action new could not be found for TestsController。这在Rails中如何工作?该行动不是强制性的?在这种情况下,Rails如何解决我的错误?

2 个答案:

答案 0 :(得分:3)

您已经听过关于配置"的约定,以及在这种情况下发生了什么。请记住,所有控制器都继承了许多方法和行为,Rails开发人员需要知道这些方法和行为,但不要直接看到;最明显的行为是,在运行与请求的URL操作同名的控制器方法之后,Rails会查找与该操作同名的视图页面。 (除非您已明确使用 render 命令来更改此行为。)

事实上,即使控制器没有匹配方法,Rails也能做到。它只是耸了耸肩并寻找具有相同名称的视图模板。

这是Rails'的大致轮廓。逻辑在这里:

  1. 我已收到" / tests / new"的请求。我有路线吗?让我看一下路线文件。
  2. 我找到了匹配的路线,它指向控制器" test"和行动"新"。
  3. 我是否有一个名为" TestController"的控制器?是的,我找到了一个。
  4. 该控制器是否有一个名为" new"的操作?不,我没有看到,但我想这不是问题,我只是寻找默认视图。
  5. 路径上是否有视图" / app / views / test / new"?是的,我看到了一个,所以我准备好该模板并将其发回给用户。
  6. 看起来其他一些回答者已陷入多元化问题,但即使你解决了这些问题,你也应该看到你所描述的行为。

答案 1 :(得分:0)

如果您在添加控制器操作后通过取出进行测试,那么rails仍然可以缓存路径,并渲染视图 - 甚至可能来自缓存。