rails Render和layout基础学习

来源:互联网 发布:华为 海思 媒体算法 编辑:程序博客网 时间:2024/06/10 12:43
render作用
生成HTTP response
渲染和解释子视图(sub-view)


render method

in controller

in view


render in controller
修改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


0 0