生成HTTP response
渲染和解释子视图(sub-view)
render method
in controllerin view
修改action的查找view的行为,组建当前request的response
def index
# ...
end
def search
@users = User.page(params[:page] || 1).per_page(params[:per_page] || 10)
.order("id desc").where(["username like ?", "%#{params[:username]}%"])
render action: :index
end
def search
# ...
render text: 'ok'
render json: @users
render xml: @users
render file: 'app/views/users/index'
render partial: 'app/views/users/search'
end
def search
# ...
if @user
render json: @user
return
end
render text: 'ok'
end
一个action只能执行一次render或者redirect_to
render in view
渲染子视图 sub-view
# app/views/users/index.html.erb
# app/views/shared/_menu.html.erb
<%= render "shared/menu" %>
<h1>Products</h1>
<p>Here are a few of our users:</p>
...
参数
<%= render "shared/menu" %>
<%= render partial: "shared/menu" %>
<%= render "shared/menu", locals: { var_1: 'value_1' } %>
遍历输出
<% @user.each do |user| %>
<%= render partial: "one_user", locals: {user: user} %>
<% end -%>
# or
<%= render "one_user", collection: @users, as: :user %>
render in view
sub-view能够访问当前view或者action的所有实例变量
Layouts
定义了view的父视图或者布局视图
# app/views/layouts/application.html.erb
<body>
...
<%= yield %>
...
</body>
# app/controllers/users_controller.rb
class UsersController < ApplicationController
layout 'application'
def index
# ...
end
end