Ruby

rails布局和视图

2018-03-25  本文已影响81人  李傲娢

渲染顺序以及继承

渲染页面的时候使用模版

在rails中可以通过指定layout的方式设置不同的控制器使用的布局文件.如果没有明确指定那么框架会首选在layout文件夹下查找和当前控制器同名的文件是否存在,如果不存在会默认使用application.html.erb

渲染视图

在做视图渲染的时候,会根据action的名字在对应的views目录中查找action.html.erb,可以通过为render方法指定参数的形式设置渲染的视图文件,如

def update
  @user = User.find(params[:id])
  if @user.update(user_params)
    redirect_to(@book)
  else
    render 'edit'
  end
end

如果调用 update 失败,update 动作会渲染同个控制器中的 edit.html.erb 模板.

如果要渲染其他控制器中的某一个action模版,可以通过指定render的参数为:'controller_name/action_name'的方式实现.如:

render 'user/login' # 渲染 app/views/user/login.html.erb
防止多次渲染

在render的时候如果一个action中有多个render会引起错误,建议使用 and return解决.如:

def show
  @user = User.find(params[:id])
  if @user.blank?
    render text: '用户信息不存在' and return
  end
  render json: @user
end

重定向

redirect_to重定向到指定的地址

redirect_back返回前一个页面

render和redirect的区别,render只会渲染视图不会执行相关action中的方法,redirect_to会执行一个新的页面跳转.

视图渲染

yield表明一个区域,渲染的视图会插入这里.可以通过命名的方式插入指定的区域,此方式需要结合content_for使用.

<!-- 布局代码 -->
<html>
  <head>
    <%= yield :head %>
  </head>
  <body>
     <%= yield %>
  </body>
</html>

<!-- 页面view -->
<% content_for :head do %>
  <title>我是标题</title>
<% end %>
<h5>插入页面中的内容</h5>
<p>这些内容会插入在body中</p>

局部视图

为了便于视图文件的重复利用和把大页面进行拆分,可以使用局部视图对页面进行组织.局部视图命名已_开始

渲染局部视图使用render方法:

<%= render 'shared/copyright' %>
<!--
  此段代码会引入 app/views/shared/_menu.html.erb这个局部视图文件
-->

可以为局部视图使用局部布局.局部布局也以_开头,放置在局部视图所在的文件夹下.使用局部布局的时候需要为render提供参数时指定属性名,如

<%= render partial: 'copyright', layout: 'footer' %>

使用局部视图的时候可以传递局部变量.如

<!-- new.html.erb -->
<h5>用户新增</h5>
<%= render partial: 'form', locals: {user: @user} %>
<!--_form.html.erb-->
<%= form_for(user) do |f| %>
  <div class="form-group">
    <label>用户名</label>
    <%= f.text_filed :name %>
  </div>
<% end %>
上一篇下一篇

猜你喜欢

热点阅读