跳到內容 跳到搜尋
命名空間
方法
R

常數

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 "&lt;h1&gt;Hello, World!&lt;/h1&gt;"
:json

將提供的物件渲染成 JSON,並將內容類型設定為 application/json。如果物件不是字串,則會呼叫 to_json 將其轉換為 JSON。

    render json: { hello: "world" }
    # => renders "{\"hello\":\"world\"}"
:renderable

呼叫 render_in 和目前的瀏覽內容來渲染提供的物件。回應格式是由呼叫 renderable 上的 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

要渲染的版面配置範本。也可以是 falsetrue 以停用或(重新)啟用預設的版面配置範本。

    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
# File actionpack/lib/action_controller/metal/rendering.rb, line 165
def render(*args)
  raise ::AbstractController::DoubleRenderError if response_body
  super
end

render_to_string(*)

類似於 render,但只傳回渲染的範本作為字串,而不是設定 self.response_body

# File actionpack/lib/action_controller/metal/rendering.rb, line 174
def render_to_string(*)
  result = super
  if result.respond_to?(:each)
    string = +""
    result.each { |r| string << r }
    string
  else
    result
  end
end