`
hideto
  • 浏览: 2666756 次
  • 性别: 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的?

相关推荐

    Rails的精简版本Rails::API.zip

    Rails::API 是 Rails 的精简版本,针对不需要使用完整 Rails 功能的开发者。 Rails::API 移除了 ActionView 和其他一些渲染功能,不关心Web前端的开发者可更容易、快速地开发应用程序,因此运行速度比正常的 Rails ...

    Rails上的API:使用Rails构建REST APIAPIs on Rails: Building REST APIs with Rails

    Rails以其简洁优雅的语法、高效的开发速度以及良好的社区支持而闻名,这使得它成为构建现代API的理想选择之一。 ### 一、什么是RESTful API REST(Representational State Transfer)是一种软件架构风格,用于定义...

    Rails中应用Ext.tree:以中国的省市地区三级联动选择为例

    在Ruby on Rails(Rails)框架中,开发人员经常需要实现各种...通过学习这个实例,开发者可以掌握如何在Rails应用中集成第三方库,处理层级数据,以及创建交互式的前端界面。这对于提升Web应用的用户体验非常有价值。

    Ruby on Rails:路由系统详解.docx

    Ruby on Rails:路由系统详解.docx

    rails_layout, 为各种前端框架生成 Rails 应用程序布局文件.zip

    rails_layout, 为各种前端框架生成 Rails 应用程序布局文件 RailsLayout gem使用这里 gem 可以设置你选择的前端框架的布局文件:Zurb基础 5.3Bootstrap 4.0Bootstrap 3.3它还将为 Bootstrap 或者基础设置设计视图。...

    rails5-docker-alpine:使用Alpine Linux的Rails轻量级Docker开发环境

    rails5-docker-alpine:使用Alpine Linux的Rails轻量级Docker开发环境

    Rails相关电子书汇总

    7. **Gemfile和Bundler**:Rails项目通过Gemfile管理依赖,Bundler工具确保在开发环境中安装正确的gem版本。 8. **ActiveSupport**:包含许多实用的工具类和模块,如时间戳处理、字符串处理等,它们被广泛地应用于...

    Advanced Rails

    7. **Rails插件与Gem**:Rails社区提供了丰富的插件和Gem,如Devise用于身份验证,Paperclip或Carrierwave处理文件上传,Resque或Sidekiq实现后台任务队列。掌握如何选择和使用这些工具来扩展应用功能。 8. **Rails...

    Ruby on Rails入门例子

    Ruby on Rails,简称Rails,是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发过程更加高效、简洁。本篇将通过一个入门实例,深入探讨Rails的基本概念和核心...

    Rails 101 入门电子书

    ### Rails 101 入门电子书知识点详解 #### 一、简介 《Rails 101 入门电子书》是一本非常适合初学者直接入门的书籍,它由xdite编写并出版于2014年6月10日。本书主要针对的是希望学习Ruby on Rails框架的读者,特别...

    rails_admin_enum4:Rails Admin Rails 4.1枚举

    Rails Admin枚举4 Rails Admin插件,用于正确查看Rails 4.1枚举 安装 gem 'rails_admin_enum4', github: 'sibext/rails_admin_enum4' bundle install 用法 通过生成器生成新模型: rails g model Sibext service:...

    Ruby+on+Rails快速Web应用开发实战.pdf

    Rails在2005年发布第一个稳定版本1.0.0。 - **Rails的版本迭代**:文档中提到的v1.0.0是Rails早期的一个版本,而Rails 2.3.2和Rails 2.5是后续更迭的版本。 - **Rails的主要特性**:Rails采用了约定优于配置...

    java基础之rails命令大全.pdf

    ### Java基础之Rails命令大全知识点解析 #### 一、Rails 命令概述 Rails 是一个用于 Web 开发的框架,它基于 Ruby 语言。Rails 遵循 MVC(Model-View-Controller)架构模式,使得 Web 应用程序的开发更加高效、简洁...

    webpack-rails, 将 web pack与你的Ruby on Rails 应用程序集成.zip

    webpack-rails, 将 web pack与你的Ruby on Rails 应用程序集成 不再维护webpack-rails 不再被维护。 有关详细信息,请参阅 #90. web pack-railsweb pack 为你提供了将 web pack集成到现有的Ruby on Rails 应用程序中...

    Ruby on Rails入门经典代码

    7. **Rails最佳实践**: - RESTful设计:遵循HTTP动词(GET, POST, PUT, DELETE)来设计API。 - Convention over Configuration (CoC):Rails强调约定优于配置,减少配置文件的复杂性。 - Asset Pipeline:管理和...

    Agile Web Development with Rails 4th edition(敏捷Web开发与Rails:程序指南 第四版)

    《敏捷Web开发与Rails:程序指南 第四版》是一本深度探讨使用Ruby on Rails框架进行敏捷Web应用开发的专业书籍。本书旨在帮助开发者充分利用Rails 4的特性,提高开发效率,实现快速迭代和高质量的代码编写。 Rails是...

    minitest-rails:用于Rails的Minitest集成

    迷你轨道与Rails 6.1的Minitest集成安装gem install minitest-rails 这将安装以下gem: minitest配置创建一个新的Rails应用程序: rails new MyApp 选择一个版本如果您正在运行Rails 6.x,请在Gemfile中指定相应的6....

    minitest-rails, Rails的Minitest集成.zip

    minitest-rails, Rails的Minitest集成 minitestRails 5的Minitest集成 安装gem install minitest-rails这将安装以下宝石:minitest配置创建一个新的Rail

Global site tag (gtag.js) - Google Analytics