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を使用しないため、<%= any%>タグが見つかると、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 に答える