render

render :template

render template 意思是渲染指定的模板,render的特性是不跑controller action,直接将该action下的模板传出来。

render 特定的模板

render views/foo/bar.html.erb

1
render "foo/bar"

render 同一個 controller 下的 action 的 view,用 symbol和string都是一樣的:

1
2
render :foobar
render "foobar"

render :layout

rails 预设的layout是app/view/layouts/application.html.erb这个档案。(如果没有引用特定的layout,就会运用application这个layout)

controller引用别的layout示例:

1
2
3
class AdminsController < ApplicationController
layout "admin"
end

也可以指定某个action要使用特定的layout

1
2
3
4
5
6
7
8
9
10
11
12
class AdminsController < ApplicationController
layout "admin", :only => :new
# 另外也可以在render的時候就指定要使用哪一個layout
def show
render :layout => "admin"
end
# 甚至可以指定模板再指定layout
def index
render :template => "others/weired_topics", layout: "admin"
end
end

render :text

render 纯文字

render “嗨,自己的文字自己render”

render options

rails 接受以下四种render options:

####:content_type
rails 预设会找 text/html 类型的档案(除非我们有:json或:xml的选项)

但我们也可以借由:content_type设定其他的档案形态。例如:

1
render file: filename,content_type: "application/rss"

content_type类型可Google MIME搜寻

:layout

:location

location header是HTTP通讯协定回应时帮client重新定位的方法,当client丢一个request到server,我们可以丢回location这个header将client导到别的地方。

1
render xml: photo, location: photo_url(photo)

:status

指定server要丢什么样的http request status给client

1
2
render status: 500
render status: :forbidden