命名空間
方法
常數
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
和目前的瀏覽內容來渲染提供的物件。回應格式是由呼叫 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
-
要渲染的版面配置範本。也可以是
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
來源:顯示 | 在 GitHub 上
# 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
。
來源:顯示 | 在 GitHub 上
# 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