render 参数汇总与详解

参数主要有 3 类:渲染格式、指定内容、传递变量。

ActionController::Rendering

# 渲染普通文本,不带格式
:plain
# 举例 render plain: "OK"
# 渲染 html 格式的内容。不推荐使用,可用 html.erb 代替
:html
# 举例 render html: "<strong>Not Found</strong>".html_safe

# 渲染普通文本,不带格式。不推荐使用,可用 :plain 代替
:text

# 兼容废除的 :text,默认是普通文本。不推荐使用
:body

# 不渲染任何东西,已废除。不推荐使用,可用 :plain 代替
:nothing

Note:不想渲染任何东西,还可以使用方法 headrender_to_string

# 指定 Header status
:status
# 指定 Header content_type
:content_type
# 指定 Header location
:location

AbstractController::Rendering

例如,渲染 show action,但 request.variant = :phone 则优先渲染:

ActionView::Rendering

ActionView::Renderer

这里的 render 方法,是 AV and AC 的主要入口,如果有 :partial 则渲染的是局部模板;否则,渲染的是普通模板。

ActionView::PartialRenderer

AbstractRenderer 的子类之一。

渲染"局部模板"时,约定:每一个局部模板都有一个与之同名的"局部变量"。

例如:

则在局部模板内有 person 可用,它代表什么内容 ,以及如何更改名字。和以下几个参数有关:

Note:前面提到的参数 :locals 也可传递变量,它们本质是一样的。

ActionView::TemplateRenderer

AbstractRenderer 的子类之一。

ActionView::Helpers::RenderingHelper

View 里 render 方法所在地,对外提供接口,处于最外层。

作用:根据参数是不是 Hash 类型,参数有没有带 block,决定了如何渲染。 如果不传递 hash,则默认渲染 partial 并且第 2 个及之后的参数做为 locals hash.

ActionController::Renderers (Metal 增强模块)

ActionController::Renderer

直接渲染模板,不依赖于具体 Controller#action 时,可额外传递的参数:

最后更新于

这有帮助吗?