常量
| RENDER_FORMATS_IN_PRIORITY | = | [:body, :plain, :html] |
实例公共方法
render(*args) 链接
渲染一个模板并将结果赋值给 self.response_body。
如果没有指定渲染模式选项,模板将从第一个参数推导得出。
render "posts/show" # => renders app/views/posts/show.html.erb # In a PostsController action... render :show # => renders app/views/posts/show.html.erb
如果第一个参数响应 render_in 方法,则通过调用 render_in 并传入当前视图上下文来渲染模板。
class Greeting def render_in(view_context) view_context.render html: "<h1>Hello, World</h1>" end def format :html end end render(Greeting.new) # => "<h1>Hello, World</h1>" render(renderable: Greeting.new) # => "<h1>Hello, World</h1>"
Rendering 模式¶ ↑
:partial-
有关详细信息,请参阅
ActionView::PartialRenderer。
render partial: "posts/form", locals: { post: Post.new } # => renders app/views/posts/_form.html.erb
:file-
渲染文件的内容。此选项不应与未经消毒的用户输入一起使用。
render file: "/path/to/some/file" # => renders /path/to/some/file
:inline-
渲染一个
ERB模板字符串。
@name = "World" render inline: "<h1>Hello, <%= @name %>!</h1>" # => renders "<h1>Hello, World!</h1>"
:body-
渲染提供的文本,并将内容类型设置为
text/plain。
render body: "Hello, World!" # => renders "Hello, World!"
:plain-
渲染提供的文本,并将内容类型设置为
text/plain。
render plain: "Hello, World!" # => renders "Hello, World!"
:html-
渲染提供的 HTML 字符串,并将内容类型设置为
text/html。如果字符串不是html_safe?,则在渲染前对字符串进行 HTML 转义。
render html: "<h1>Hello, World!</h1>".html_safe # => renders "<h1>Hello, World!</h1>" render html: "<h1>Hello, World!</h1>" # => renders "<h1>Hello, World!</h1>"
:json-
将提供的对象渲染为 JSON,并将内容类型设置为
application/json。如果对象不是字符串,它将通过调用to_json转换为 JSON。
render json: { hello: "world" } # => renders "{\"hello\":\"world\"}"
:renderable-
通过调用
render_in并传入当前视图上下文来渲染提供的对象。响应格式通过调用format方法(如果可渲染对象响应format)确定,默认情况下回退到text/html。
render renderable: Greeting.new # => renders "<h1>Hello, World</h1>"
默认情况下,当指定渲染模式时,不会渲染布局模板。
选项¶ ↑
:assigns-
模板的实例变量赋值的
Hash。
render inline: "<h1>Hello, <%= @name %>!</h1>", assigns: { name: "World" } # => renders "<h1>Hello, World!</h1>"
:locals-
模板的局部变量赋值的
Hash。
render inline: "<h1>Hello, <%= name %>!</h1>", locals: { name: "World" } # => renders "<h1>Hello, World!</h1>"
:layout-
要渲染的布局模板。也可以是
false或true来禁用或(重新)启用默认布局模板。
render "posts/show", layout: "holiday" # => renders app/views/posts/show.html.erb with the app/views/layouts/holiday.html.erb layout render "posts/show", layout: false # => renders app/views/posts/show.html.erb with no layout render inline: "<h1>Hello, World!</h1>", layout: true # => renders "<h1>Hello, World!</h1>" with the default layout
:status-
与响应一起发送的 HTTP 状态码。可以指定为数字或
Symbol形式的状态名称。默认为 200。
render "posts/new", status: 422 # => renders app/views/posts/new.html.erb with HTTP status code 422 render "posts/new", status: :unprocessable_entity # => renders app/views/posts/new.html.erb with HTTP status code 422
:variants-
这会告诉
Rails查找第一个与任何变体匹配的模板。
render "posts/index", variants: [:mobile] # => renders app/views/posts/index.html+mobile.erb
来源: 显示 | 在 GitHub 上
# File actionpack/lib/action_controller/metal/rendering.rb, line 171 def render(*args) raise ::AbstractController::DoubleRenderError if response_body super end
render_to_string(*) 链接
与 render 类似,但只将渲染的模板作为字符串返回,而不是设置 self.response_body。
来源: 显示 | 在 GitHub 上
# File actionpack/lib/action_controller/metal/rendering.rb, line 180 def render_to_string(*) result = super if result.respond_to?(:each) string = +"" result.each { |r| string << r } string else result end end