2010-09-02 42 views
4

在Rails 3我用下面的幫助,以便傭工得到偶奇色表:轉換的Rails 3至梁2:塊使用

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的問題是梁2不使用Erubis,所以當它找到一個<%=無論%>標籤,它只是調用whatever.to_s。所以,在我的情況下,這個結果試圖執行

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

有明顯的(壞)後果。問題是:我原則上錯了嗎(比如「助手不應該以這種方式工作,請改用...」)還是應該尋找解決方法?

謝謝。

回答

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 %> 
5

這可能不是回答你的問題,但還有一個更簡單的實現偶/奇色表的方式,使用cycle命令

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

希望這在向您介紹一個很酷的Rails程序

+0

這是實現我需要在這個場合有什麼好和有效的方式,但我仍想知道如果傳遞塊助手是接受的行爲。感謝您的回答! :-) – 2010-09-02 21:23:47