`

laout 5 种方法

 
阅读更多

一般来说layout有如下五种:
gobal layout,controller layout,shared layout,dynamic layout,action layout

假设我们有一个views/projects/index.rhtml页面:

<h2>Projects</h2>
<ul>
<% for project in @projects %>
  <li><%= project.name %></li>
<% end %>
</ul>


下面来看看各种layout的用法。

1,global layout
添加views/layouts/application.rhtml:

<h1>Application Layout!</h1>
<%= yield %>


在layouts目录下添加application.rhtml即可,<%= yield %>即输出我们的projects/index.rhtml页面
由于我们的controller都继承自ApplicationController,所以application.rhtml会先解析

2,controller layout
添加views/layouts/projects.rhtml:

<h1>Projects Layout!</h1>
<%= yield %>


道理同上,ProjectsController当然会使用同名的projects.rhtml作layout了
注意的是controller layout会覆盖global layout

3,shared layout
添加views/layouts/admin.rhtml:

<h1>Admin Layout!</h1>
<%= yield %>


我们建立了admin layout,然后在需要使用该layout的controller中指定即可:

class ProjectsController < ApplicationController
  layout "admin"
 
  def index 
    @projects = Project.find(:all)
  end
end



4,dynamic layout
有时候我们需要根据不同的用户角色来使用不同的layout,比如管理员和一般用户,比如博客换肤(也可以用更高级的theme-generator)

class ProjectsController < ApplicationController
  layout :user_layout
 
  def index
    @projects = Project.find(:all)
  end
 
  protected
 
  def user_layout
    if current_user.admin?
      "admin"
    else
      "application"
    end
  end
end



5,action layout
在action中指定layout即可:

class ProjectsController < ApplicationController
  layout :user_layout
 
  def index
    @projects = Project.find(:all)
    render :layout => 'projects'
  end
 
  protected
 
  def user_layout
    if current_user.admin?
      "admin"
    else
      "application"
    end
  end
end


上面的index方法指定使用projects layout,当然我们也可以指定不使用layout,如printable页面:

def index
  @projects = Project.find(:all)
  render :layout => false
end



需要注意的是,这5种layout会按顺序后面的覆盖前面的layout

关于erb和capture的文章:http://hideto.iteye.com/blog/97353

分享到:
评论

相关推荐

    手机电路LAOUT

    手机电路LAOUT手机电路LAOUT手机电路LAOUT

    PCB-Layout初学者必会知识.doc

    PCB-Layout是一种布局规划的方式,结合起来,PCB-Layout就是印刷电路板布局布线的中文意思。在PCB-Layout中,需要了解常用电子元器件英文,如电阻用RES,电容用CAP,电感用IND等等。 在PCB-Layout设计中,需要考虑...

    SSD-layout check list

    SSD-layout check list-20140319 新開案,一律使用公司規範之零件庫進行Net in

    Unity2019-06-02-06-Layout.unitypackage

    Unity2019学习,常用功能Unity UI的自动布局组件演示

    react-native动态切换tab组件的方法

    在这篇文章中,我们将重点讲述第二种 Tab 组件的实现方法。 二、自动滑动的核心公式 在实现自动滑动的效果时,我们需要计算出当前位置需要滑动多少距离才能够将位置居中。这里的公式是:需要滑动的位置 = 点击位置...

    详解CSS的table-layout属性的用法

    前言: 今天来和大家详细说一下table-layout属性的用法。 /*eg:设置表格布局算法*/ table{ table-layout:fixed; } ***本文关键词:table-layout属性值、定义和用法、固定表格布局、自动表格布局。...

Global site tag (gtag.js) - Google Analytics