将Rails 3转换为Rails 2:使用块的帮助程序

在Rails 3中,我使用以下帮助程序来获得奇偶色表:

def bicolor_table(collection, classes = [], &block) string = "" even = 0 for item in collection string < (((even % 2 == 0) ? "even " : "odd ") + classes.join(" "))) do yield(item) end even = 1 - even end return string end 

我在我的观点中使用它:

     

现在,我必须将应用程序迁移到Rails 2.问题是Rails 2不使用Erubis,因此当它找到标记时,它只调用whatever.to_s。 所以,在我的情况下,这导致尝试执行

 (bicolor_table(services) do |service|).to_s 

带来明显(坏)的后果。 问题是:我原则上是错的(比如“帮助者不应该这样工作,而是使用……”)或者我应该找一个解决方法吗?

谢谢。

这是完全可行的,事实上使某些类型的助手更加简单。 您需要使用<% %>concat来实现此目的。

 def my_block_helper(param, &block) output = %(
#{ capture(&block) }
) concat output end

在你的视图中使用它,如下所示:

 <% my_block_helper do %> Some Content <% end %> 

这可能无法解答您的问题,但使用cycle命令可以更简单地实现偶数/奇数颜色表

  @items = [1,2,3,4]  <% @items.each do |item| %> ">  <% end %> 
item

希望这能为您介绍一个很酷的Rails实用程序