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开发的小工具,能大幅提供生产率啊!

你可能感兴趣的:(Ruby,on,Rails,Rails,Ruby,Web,HTML,框架)