我使用命令
生成了一个没有动作的控制器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如何解决我的错误?
答案 0 :(得分:3)
您已经听过关于配置"的约定,以及在这种情况下发生了什么。请记住,所有控制器都继承了许多方法和行为,Rails开发人员需要知道这些方法和行为,但不要直接看到;最明显的行为是,在运行与请求的URL操作同名的控制器方法之后,Rails会查找与该操作同名的视图页面。 (除非您已明确使用 render 命令来更改此行为。)
事实上,即使控制器没有匹配方法,Rails也能做到。它只是耸了耸肩并寻找具有相同名称的视图模板。
这是Rails'的大致轮廓。逻辑在这里:
看起来其他一些回答者已陷入多元化问题,但即使你解决了这些问题,你也应该看到你所描述的行为。
答案 1 :(得分:0)
如果您在添加控制器操作后通过取出进行测试,那么rails仍然可以缓存路径,并渲染视图 - 甚至可能来自缓存。