Rails宝典之第七式: layout详解

news/2024/7/11 1:06:04 标签: Rails, Blog
这次的视频很有用,详细解释了layout的用法
一般来说layout有如下五种:
gobal layout,controller layout,shared layout,dynamic layout,action layout

假设我们有一个views/projects/index.rhtml页面:
[code]
<h2>Projects</h2>
<ul>
<% for project in @projects %>
<li><%= project.name %></li>
<% end %>
</ul>
[/code]
下面来看看各种layout的用法。

[b]1,global layout[/b]
添加views/layouts/application.rhtml:
[code]
<h1>Application Layout!</h1>
<%= yield %>
[/code]
在layouts目录下添加application.rhtml即可,<%= yield %>即输出我们的projects/index.rhtml页面
由于我们的controller都继承自ApplicationController,所以application.rhtml会先解析

[b]2,controller layout[/b]
添加views/layouts/projects.rhtml:
[code]
<h1>Projects Layout!</h1>
<%= yield %>
[/code]
道理同上,ProjectsController当然会使用同名的projects.rhtml作layout了
注意的是controller layout会覆盖global layout

[b]3,shared layout[/b]
添加views/layouts/admin.rhtml:
[code]
<h1>Admin Layout!</h1>
<%= yield %>
[/code]
我们建立了admin layout,然后在需要使用该layout的controller中指定即可:
[code]
class ProjectsController < ApplicationController
layout "admin"

def index
@projects = Project.find(:all)
end
end
[/code]

[b]4,dynamic layout[/b]
有时候我们需要根据不同的用户角色来使用不同的layout,比如管理员和一般用户,比如博客换肤(也可以用更高级的[url=http://rubyforge.org/projects/theme-generator/]theme-generator[/url])
[code]
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
[/code]

[b]5,action layout[/b]
在action中指定layout即可:
[code]
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
[/code]
上面的index方法指定使用projects layout,当然我们也可以指定不使用layout,如printable页面:
[code]
def index
@projects = Project.find(:all)
render :layout => false
end
[/code]

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

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

http://www.niftyadmin.cn/n/728476.html

相关文章

python前景如何调用带有event参数的方法_python调用有事件发生的com时,需要一些技巧。...

我们以ie这个com为例来讲解一下我的经验。 首先我们需要pywin32这个模块的支持&#xff0c;它提供了我们调用com便利直接方法。你可以www.sf.net搜索并下载它。先运行如下代码&#xff1a;import win32guiimport win32comimport win32com.clientimport pythoncomimport timecla…

java防止电脑锁屏的网页_关于windows防止锁屏小程序

网上找到一个放锁屏的小程序&#xff0c;(按文章中直接将代码贴到一个类里&#xff0c;打jar包&#xff0c;两行脚本运行jar包即可&#xff0c;但也有一些小曲折)mark一下packagemain;importjava.awt.AWTException;importjava.awt.Dimension;importjava.awt.MouseInfo;importja…

Rails宝典之第八式: layout与content_for

如果我们想根据模板页面更改局部layout&#xff0c;使用content_for即可。 content_for允许模板页面代码放到layout中的任何位置。比如我们的Rails程序不同的页面有不同的css样式&#xff0c;我们可以在layout里留出位置: [code] <!DOCTYPE html PUBLIC "-//W3C//DTD X…

多个bit位整合成一个byte输出_除了使用TrustZone,升到64位也很重要

本文首发极术社区原文&#xff1a;除了使用TrustZone&#xff0c;升到64位也很重要作者&#xff1a;Ethan.Zhang更多平台安全架构的技术干货&#xff0c;请关注极术社区PSA专栏。如想探讨&#xff0c;欢迎添加微信 aijishu20&#xff0c;加入PSA微信群.最近跟朋友聊Arm安全时&a…

java map 遍历 大数量_Java Map 遍历史上最全

Map 遍历:Map map new HashMap();map.put(1, "a");map.put(2, "b");map.put(3, "ab");map.put(4, "ab");map.put(4, "ab");//和上面相同 &#xff0c; 会自己筛选System.out.println(map.size());//第一种&#xff1a;Syst…

python 魔法方法什么时候用_Python进阶——如何正确使用魔法方法?(下)

阅读本文大约需要 10 分钟。在上一篇文章 Python进阶——如何正确使用魔法方法&#xff1f;(上) 中&#xff0c;我们主要介绍了关于构造与初始化、类的表示、访问控制这几类的魔法方法&#xff0c;以及它们的使用场景。这篇文章&#xff0c;我们继续介绍剩下的魔法方法&#xf…

Rails宝典之第九式: 在日志里过滤敏感数据

这是个安全问题&#xff0c;当我们在系统注册页面输入密码等敏感数据时&#xff0c;我们可以看到&#xff0c;密码以明文的形式显示在日志文件里: [code] Processing UsersController#create (for 127.0.0.1 at 2007-02-23 19:11:20) [POST]Session ID: 4047778b64af62d387f7e8…

java web 博客园_Java Web

Web一&#xff0e;概念javaweb&#xff1a;使用java语言开发基于互联网的项目软件架构&#xff1a;c/s&#xff1a;Client/server 客户端/服务器端&#xff0c;在用户本地有一个客户端程序&#xff0c;在远程有一个服务器程序,如&#xff0c;qq 基于TCP/HTTP协议&#xff0c…