rails 3渲染视图无需操作

我为特定操作定义了路由并创建了一个链接。 我也创建了相应的视图,但没有代码定义控制器动作方法。 单击链接时仍会显示视图。 也就是说,在没有实际存在的动作的情况下渲染视图。

有什么解释吗?

是的,即使没有相应的操作,也会呈现视图,它将在为相同的路径定义时起作用。 但这不是一个好习惯!

对于Rails渲染视图,您需要定义一个控制器(不一定使用相应的方法),一个引用视图和视图的路径。 只有在需要向视图提供数据时,才需要向控制器添加方法。

http://guides.rubyonrails.org/layouts_and_rendering.html#rendering-by-default-convention-over-configuration-in-action对此有一个非常详尽的解释。

Rails不希望您为config/routes.rb文件中的每个路由定义控制器操作。 正如您可能知道的那样,您可以定义一个动作,并将其保留为空:

 class PostsController < ApplicationController def index end end 

对于任何Web应用程序来说,保持这种方式是不常见的,因为实例变量,数据库事务等代码最终会填充大多数控制器操作。 对于纯静态页面,仍应定义操作但应为空。

即使您为该操作定义了filter,它也会执行,无论您是否已定义操作,并且Glen通过其链接提到,rails会自动呈现与名称为控制器的文件夹内的操作名称相同的视图(它存在于views文件夹中)。

空行动相当于没有行动,但规定是出于某些原因(如可理解和可维护性)来定义行动。

参考:这里链接说

请注意,上面示例中的空方法可以正常工作,因为Rails默认会呈现new.html.erb视图,除非该操作另有说明

因此,如果您必须更改默认响应,则定义显式HTTP响应。