rails布局和视图

渲染顺序以及继承

渲染页面的时候使用模版

在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使用.



  
    <%= yield :head %>
  
  
     <%= yield %>
  



<% content_for :head do %>
  我是标题
<% end %>
插入页面中的内容

这些内容会插入在body中

局部视图

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

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

<%= render 'shared/copyright' %>

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

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

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


用户新增
<%= render partial: 'form', locals: {user: @user} %> <%= form_for(user) do |f| %>
<%= f.text_filed :name %>
<% end %>

你可能感兴趣的:(rails布局和视图)