rails :layout 详解(载)

本文详细介绍了Rails应用中的五种布局方式:全局布局、控制器布局、共享布局、动态布局和操作布局,并通过实例展示了如何使用这些布局。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<div id="blog_text" class="cnt">一般来说layout有如下五种:<br>gobal layout,controller layout,shared layout,dynamic layout,action layout
假设我们有一个views/projects/index.rhtml页面:<br>代码
   1. <h2>projects</h2> <br>   2. <ul> <br>   3. <% for project in @projects %> <br>   4.   <li><%= project.name %></li> <br>   5. <% end %> <br>   6. </ul>
<br>下面来看看各种layout的用法。
1,global layout<br>添加views/layouts/application.rhtml:<br>代码
   1. <h1>application layout!</h1> <br>   2. <%= yield %>
<br>在layouts目录下添加application.rhtml即可,<%= yield %>即输出我们的projects/index.rhtml页面<br>由于我们的controller都继承自applicationcontroller,所以application.rhtml会先解析
2,controller layout<br>添加views/layouts/projects.rhtml:<br>代码
   1. <h1>projects layout!</h1> <br>   2. <%= yield %>
<br>道理同上,projectscontroller当然会使用同名的projects.rhtml作layout了<br>注意的是controller layout会覆盖global layout
3,shared layout<br>添加views/layouts/admin.rhtml:<br>代码
   1. <h1>admin layout!</h1> <br>   2. <%= yield %>
<br>我们建立了admin layout,然后在需要使用该layout的controller中指定即可:<br>代码
   1. class projectscontroller < applicationcontroller <br>   2.   layout "admin" <br>   3.   <br>   4.   def index   <br>   5.     @projects = project.find(:all) <br>   6.   end <br>   7. end
4,dynamic layout<br>有时候我们需要根据不同的用户角色来使用不同的layout,比如管理员和一般用户,比如博客换肤(也可以用更高级的theme-generator)<br>代码
   1. class projectscontroller < applicationcontroller <br>   2.   layout :user_layout <br>   3.   <br>   4.   def index <br>   5.     @projects = project.find(:all) <br>   6.   end <br>   7.   <br>   8.   protected <br>   9.   <br>10.   def user_layout <br>11.     if current_user.admin? <br>12.       "admin" <br>13.     else <br>14.       "application" <br>15.     end <br>16.   end <br>17. end
5,action layout<br>在action中指定layout即可:<br>代码
   1. class projectscontroller < applicationcontroller <br>   2.   layout :user_layout <br>   3.   <br>   4.   def index <br>   5.     @projects = project.find(:all) <br>   6.     render :layout => 'projects' <br>   7.   end <br>   8.   <br>   9.   protected <br> 10.   <br> 11.   def user_layout <br> 12.     if current_user.admin? <br> 13.       "admin" <br> 14.     else <br> 15.       "application" <br> 16.     end <br> 17.   end <br> 18. end
 
 
 
上面的index方法指定使用projects layout,当然我们也可以指定不使用layout,如printable页面:<br>代码
   1. def index <br>   2.   @projects = project.find(:all) <br>   3.   render :layout => false <br>   4. end
需要注意的是,这5种layout会按顺序后面的覆盖前面的layout
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值