`
hideto
  • 浏览: 2650728 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Rails宝典之第七式: layout详解

    博客分类:
  • Ruby
阅读更多
这次的视频很有用,详细解释了layout的用法
一般来说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
分享到:
评论
3 楼 小嘴看世界 2007-08-22  
指定不使用layout太棒了  正不知道怎么解决呢
2 楼 caryl 2007-07-29  
www.railscasts.com
1 楼 blackanger 2007-07-29  
什么视频?RailsCast的?

相关推荐

Global site tag (gtag.js) - Google Analytics