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

Alb*_*ini 4 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
        yield(item)
    end
    even = 1 - even
  end
  return string
end
Run Code Online (Sandbox Code Playgroud)

我在我的观点中使用它:

<%= bicolor_table(services) do |service| %>
    <td><%= image_tag service.area.small_image %></td>
    <td><%= link_to service.title, service %></td>
<% end %>
Run Code Online (Sandbox Code Playgroud)

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

(bicolor_table(services) do |service|).to_s
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Jon*_*han 5

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

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

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