Ruby on rails 将Rails 3转换为Rails 2:带块的辅助对象

Ruby on rails 将Rails 3转换为Rails 2:带块的辅助对象,ruby-on-rails,helper,view-helpers,Ruby On Rails,Helper,View Helpers,在Rails 3中,我使用以下帮助程序来获得奇偶色表: def bicolor_table(collection, classes = [], &block) string = "" even = 0 for item in collection string << content_tag(:tr, :class => (((even % 2 == 0) ? "even " : "odd ") + classes.join(" "))) do

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

def bicolor_table(collection, classes = [], &block)
  string = ""
  even = 0
  for item in collection
    string << content_tag(:tr, :class => (((even % 2 == 0) ? "even " : "odd ") + classes.join(" "))) do
        yield(item)
    end
    even = 1 - even
  end
  return string
end
有明显的(坏的)后果。问题是:原则上我错了(比如“助手不应该这样工作,而是使用…”)还是我应该寻找解决方法


谢谢。

这可能无法回答您的问题,但有一种更简单的方法可以使用
循环
命令实现偶数/奇数颜色表

 @items = [1,2,3,4]
  <table>
  <% @items.each do |item| %>
    <tr class="<%= cycle("even", "odd") -%>">
      <td>item</td>
    </tr>
  <% end %>
  </table>
@items=[1,2,3,4]
项目

希望在这里向您介绍一个很酷的Rails实用程序

这是完全可行的,事实上,它使某些类型的帮助程序更加简单。您需要使用
concat
来实现这一点

def my_block_helper(param, &block)
  output = %(<div class="wrapper-markup">#{ capture(&block) }</div>)
  concat output
end
def my_block_助手(参数和块)
输出=%(#{capture(&block)})
concat输出
结束
在视图中使用它,如下所示:

<%= bicolor_table(services) do |service| %>
    <td><%= image_tag service.area.small_image %></td>
    <td><%= link_to service.title, service %></td>
<% end %>
<% my_block_helper do %>
  <span>Some Content</span>
<% end %>

一些内容

这是一种很好且有用的方法,可以在这种情况下实现我所需要的功能,但我仍然想知道将块传递给助手是否是一种可以接受的行为。谢谢你的回答!:-)
<% my_block_helper do %>
  <span>Some Content</span>
<% end %>