2010-08-14 5 views
8

Je vous écris une méthode d'assistance Rails qui ajoutera emballage html à des blocs de contenu capturé et remplacer la méthode content_for, commeComment écrire une aide dans Ruby on Rails pour capturer des blocs Haml?

- content_for :header do 
//haml code 

..would deviennent

- content :header do 
//haml code 

Pour ce faire, je suis en utilisant des blocs Haml et Ruby. C'est à quoi ça ressemble

def content(name,&block) 
content_for name do 
    capture_haml do 
    haml_tag "div",{:id=>name.to_s} do 
     haml_tag "div",{:id=>"#{name.to_s}_group"} do 
     block 
     end 
    end  
    end  
end 
end 

Mais je n'arrive pas à faire fonctionner ça. Il n'y a pas de message d'erreur. Cela ne montre tout simplement pas le bloc! Je ne suis pas sûr de ce que je fais mal. J'apprécierais une deuxième opinion.

Répondre

10

Vous faites à peu près la bonne chose, mais vous n'appelez pas réellement le bloc #content est passé. Pour ce faire, utilisez soit block.call, soit l'instruction yield intégrée de Ruby.

0

changer juste ce

haml_tag "div",{:id=>"#{name.to_s}_group"} do 
    yield 
end 

à

haml_tag "div",{:id=>"#{name.to_s}_group"},&block 
+0

Ces deux sont en fait exactement équivalent dans le comportement. (La version '& block' peut être légèrement plus performante, mais ces jours-ci, ils sont à peu près les mêmes.) Comme le souligne @ nex3, l'OP n'appelait pas' yield', mais retournait simplement le 'block' sans l'appeler. – Peeja