2010-09-02 3 views
4

В Rails 3, я использую следующий помощник для того, чтобы получить четным нечетным цвета таблицы:Преобразование Rails 3 в Rails 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. проблема заключается в Rails 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

Это хороший и полезный способ добиться того, что мне нужно было по этому поводу, но все-таки мне интересно, если прохождение блоков помощникам является приемлемое поведение. Спасибо за Ваш ответ! :-) –

Смежные вопросы