4

在 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

我在我的观点中使用它,如下所示:

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

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

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

有明显的(坏的)后果。问题是:我原则上是错的(比如“助手不应该以这种方式工作,而是使用......”)还是我应该寻找解决方法?

谢谢。

4

2 回答 2

5

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

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

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

于 2010-09-02T20:33:11.820 回答
3

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

def my_block_helper(param, &block)
  output = %(<div class="wrapper-markup">#{ capture(&block) }</div>)
  concat output
end

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

<% my_block_helper do %>
  <span>Some Content</span>
<% end %>
于 2011-02-03T02:42:59.733 回答