`
rubyrock
  • 浏览: 23034 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Rails中CaptureHelper实现view片段的复用

阅读更多

今天在修改论坛的版主操作工具条时,偶然发现一个好东西,就是CaptureHelper中的Capture方法,可以很优雅的解决view中片段重复利用的问题。

 

设想一下这样的场景:论坛帖子页面需要为版主提供一个版主操作工具条,这个工具条件有好几个按钮,比如删帖,置精华和置顶等等,为生成这个工具条需要进行数量可观的条件判断以及html拼接。为方便版主使用,通常我们需要两个地方--顶部和底部都提供这个工具条。

 

按照通常的做法,把这两大段代码写上重复的两份,一份放在顶部,一份放在底部。这样导致的问题是:

1,重复的代码,修改维护起来特头疼,容易出错;

2,从执行效率来说,做两次重复的判断和拼接,不划算。

 

本着Rails DRY的原则,当然不允许这样的事情存在。今天发现Rails CaptureHelper中的Capture方法可以巧妙、优雅的解决这个问题。其实说起来也很简单,看一下下面的伪代码就明白了。

 

 #这是view中的代码 
<% toolbar_html = capture do %>
   #这里是生成toolbar的大段判断和拼接代码
<% end %>

#这里是顶部版主工具条
<%=toolbar_html%>

......
#这里是底部版主工具条
<%=toolbar_html%>

其原理也简单,无非是把做为capture block参数的erb段先执行生成html放到一个临时变量中,再在页面重复使用。

 

后来看了一下will_paginate的页码控制html,也是用了capture来实现重复利用。

 

 

Ruby on Rails不愧是从第一线的web开发人员开发出来的现代web框架,很多非常便利web开发的小工具,能大幅提供生产率啊!

分享到:
评论
3 楼 0701 2009-12-20  
这种问题一般都是用partial处理的较多,我想你那个其实也是基于局部模板的罢
2 楼 rubyrock 2009-12-16  
netfork 写道
局部模板是不是更优雅一点?


使用局部模板可以避免代码重复的问题,不过使用局部模板的话这部分代码是重复执行的,效率不好哦。
1 楼 netfork 2009-12-16  
局部模板是不是更优雅一点?

相关推荐

    Ruby on Rails中文指南

    Ruby on Rails,简称Rails,是一款基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,旨在提升开发效率和代码的可读性。Rails以其“约定优于配置”的设计理念,以及“DRY(Don't Repeat ...

    RailsGuides中那个blog程序源码

    Rails的 erb(Embedded Ruby)模板引擎允许开发者在HTML中嵌入Ruby代码,实现动态内容生成。 **控制器(Controller)** 是模型和视图之间的桥梁,处理用户的请求,调用模型进行业务处理,并将数据传递给视图进行...

    Rails 中mongrel的安装

    Rails是Ruby on Rails框架的简称,它是一种基于Ruby语言的开源Web开发框架,以其MVC(Model-View-Controller)架构而闻名,旨在简化Web应用的开发过程。在早期的Rails版本中,Mongrel是一个常用的HTTP服务器,用于...

    Rails项目源代码

    Ruby on Rails,通常简称为Rails,是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式。这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何...

    在rails中 使用RSpec生产CHM文档

    标题 "在Rails中使用RSpec生产CHM文档" 暗示了这个话题是关于如何在Ruby on Rails(简称Rails)框架中使用RSpec测试工具来创建帮助文档,特别是以CHM(Microsoft Compiled HTML Help)格式。CHM文件是一种常见的...

    rails2.0下实现《rubyonrails》中的mybook实例

    在这个实例中,我们将探讨如何在Rails应用中使用SQLite3数据库,通过`sqlite3.exe`这个小巧而强大的数据库管理工具来实现数据存储。SQLite3是嵌入式的数据库引擎,无需单独的服务器进程,非常适合用于开发阶段或者轻...

    rails指南 中文版

    Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,强调“约定优于配置”(Conventions over Configuration)和“Don't Repeat Yourself”(DRY,不要...

    Rails 101 入门电子书

    - 如何在Rails中实现RESTful接口。 - **案例分析**: - 分析一个典型的RESTful应用示例。 #### 九、练习作业2-在Group里面发表文章-双层RESTFul - **目标**: - 在Group中添加Post功能。 - **实现过程**: - 创建...

    Ruby On Rails中文教材(PDF)

    Ruby on Rails,简称Rails,是一款基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web应用程序的开发。Rails由David Heinemeier Hansson于2004年创建,它提倡“约定优于配置...

    component base rails applications

    在掌握了以上知识点后,开发人员能够更加系统地了解如何利用Rails Engine来实现模块化的Rails应用,从而提高代码的复用性、可维护性和扩展性。通过拆分成组件,还能让团队分工更加清晰,提高开发效率,减少代码间的...

    中文版rails教程

    在Ruby on Rails中,开发者可以快速构建功能丰富的动态网站,因为它提供了大量的内置功能和库,如数据库连接、ORM(对象关系映射)系统ActiveRecord、模板引擎ActionView以及路由系统ActionController等。...

    Struts2和Rails的国际化实现

    总结来说,Struts2和Rails的国际化实现都是基于资源文件,并通过特定的API或辅助方法在代码中引用这些资源。它们都考虑了会话和请求的上下文来自动选择合适的语言,并提供了手动切换语言的能力。尽管实现方式有所...

    rails中使用javascript日期控件

    这篇博客“rails中使用javascript日期控件”探讨的就是如何在Rails应用中集成JavaScript日期控件,特别是通过一个名为WebCalendar.js的库来实现这一功能。WebCalendar.js是一个轻量级的JavaScript库,用于创建交互式...

    Ruby on Rails实践

    在Ruby on Rails实践中,我们首先会接触到MVC(Model-View-Controller)架构模式。Model代表数据模型,负责业务逻辑和数据库交互;View负责展示数据,通常由HTML、CSS和JavaScript组成;Controller处理用户请求,并...

    Rails 3 in Action

    3. **MVC架构**:Rails采用Model-View-Controller架构,书中详细解释了模型(Model)、视图(View)和控制器(Controller)之间的交互与职责。 4. **路由**:Rails的路由系统允许灵活地定义URL到控制器动作的映射,...

    rails敏捷开发的购物车系统

    可以创建一个购物车组件(partial),在多个页面中复用。同时,利用Bootstrap或类似的前端框架提升用户体验。 控制器是处理用户请求的关键部分。例如,`CartsController` 可能有`add_item`、`remove_item`和`...

    Rails的中文乱码问题

    Rails是一个基于Ruby语言的开源Web开发框架,它遵循MVC(Model-View-Controller)架构模式。在处理中文数据时,由于不同系统、数据库和文件之间的编码差异,可能会出现乱码现象。 中文乱码问题通常出现在以下几个...

    Ruby on Rails中MVC结构的数据传递解析

    在Rails的MVC架构中,为了提高代码的复用性和清晰度,开发者应当遵循一些约定,比如模型名应为单数形式,而对应的表名应为复数形式。这些约定减少了开发者需要编写的配置代码量,同时也有助于在团队内部形成统一的...

Global site tag (gtag.js) - Google Analytics