2010-09-02 5 views
4

dans Rails 3 J'utilise l'aide suivante afin d'obtenir une table de couleur pair-impair:Conversion Rails 3 Rails 2: aides avec des blocs

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 

et je l'utilise dans mon point de vue comme celui-ci:

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

maintenant, je dois migrer l'application Rails 2. le problème est Rails 2 ne pas utiliser erubis, alors quand il trouve un <% =% quelle que soit> balise, il appelle simplement whatever.to_s. Donc, dans mon cas, ce résultat en essayant d'exécuter

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

Avec les conséquences évidentes (mauvaises). La question est: ai-je tort en principe (comme "les assistants ne devraient pas travailler de cette façon, utilisez plutôt ...") ou devrais-je chercher une solution de contournement?

Merci.

Répondre

3

Ceci est totalement faisable, et rend en fait certains types d'aides beaucoup plus simples. Vous devez utiliser <% %> et concat pour y parvenir.

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

l'utiliser dans vos vues comme ceci:

<% my_block_helper do %> 
    <span>Some Content</span> 
<% end %> 
5

Cela pourrait ne pas répondre à votre question, mais il y a une beaucoup plus simple à atteindre, même/table de couleurs bizarre, en utilisant la commande cycle

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

Hope this à vous présente un endroit frais Rails utilitaire

+0

Ceci est un bon et moyen utile pour atteindre ce que je devais à cette occasion, mais je me demande si le passage des blocs d'aides est comportement acceptable. Merci pour votre réponse! :-) –

Questions connexes