2010-08-14 7 views
8

Estoy escribiendo un método de ayuda rieles que agregará html envoltura para bloques de contenido capturado y reemplazar el método content_for, como¿Cómo escribir un ayudante en Ruby on Rails para capturar bloques de Haml?

- content_for :header do 
//haml code 

..would convierten

- content :header do 
//haml code 

Con el fin de hacer esto estoy usando bloques de Haml y Ruby. Esto es lo que parece

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 

Pero no puedo hacer que esto funcione. No hay ningún mensaje de error. ¡Simplemente no muestra el bloque en absoluto! No estoy seguro de lo que estoy haciendo mal. Agradecería una segunda opinión.

Respuesta

10

Está haciendo lo correcto, pero no está llamando al bloque #content se pasa. Para hacerlo, use block.call o la declaración incorporada de Ruby yield.

0

acaba de cambiar esta

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

a

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

Estos dos son en realidad exactamente equivalente en el comportamiento. (La versión '& block' puede ser un poco más eficiente, pero en estos días son más o menos lo mismo.) Como @ nex3 señala, el OP no llamaba' yield', sino que simplemente devolvía el 'block' sin llamándolo – Peeja