我定义了特定操作的路由并创建了一个链接。我也创建了相应的视图,但没有代码定义控制器动作方法。单击链接时仍会显示视图。也就是说,在没有实际存在动作的情况下渲染视图。
有任何解释吗?
答案 0 :(得分:5)
是的,即使没有相应的操作,也会呈现视图,它将在为相同的路径定义时起作用。但这不是一个好习惯!
答案 1 :(得分:3)
对于Rails渲染视图,您需要定义一个控制器(不一定使用相应的方法),一个引用视图和视图的路径。只有在需要向视图提供数据时,才需要向控制器添加方法。
对此有一个非常详尽的解释答案 2 :(得分:1)
Rails不希望您为config/routes.rb
文件中的每个路由定义控制器操作。正如您可能知道的那样,您可以定义一个动作并将其保留为空:
class PostsController < ApplicationController
def index
end
end
对于任何Web应用程序来说,保持这种方式是不常见的,因为实例变量,数据库事务等代码最终会填充大多数控制器操作。对于纯静态页面,仍应定义操作但应为空。
答案 3 :(得分:0)
即使您为该操作定义过滤器,它也会执行,无论您是否已定义操作,并且Glen通过其链接提到,rails会自动呈现与名称为该文件夹内的操作名称相同的视图控制器(存在于视图文件夹中)。
空行动相当于没有行动,但规定是出于某些原因(如可理解和可维护性)来定义行动。
参考:此处link说
请注意,上面示例中的空方法可以正常工作 因为Rails默认会渲染new.html.erb视图,除非 行动说不然
因此,如果您必须更改默认响应,则定义显式HTTP响应。