2011-04-04 5 views
12

he utilizado este modelo para un número de ayudantes en los carriles 2, pero no está funcionando de la misma en los carriles 3. Mi objetivo es tener un método de ayuda a generar algunas etiquetas HTML con contenido anidado dentro. Aquí es un ejemplo básico de lo que estoy tratando de conseguir:¿Cómo cede un método auxiliar a un bloque en los carriles 3?

<div class="box"> 
    my content 
</div> 

En los carriles 2 lo hago de esta manera:

dentro de mi archivo de diseño que llamo el método de ayuda:

<% box_wrapper do %> 
    <%= yield -%> 
    <% end %> 

el método de ayuda se define así:

def box_wrapper 
    concat <<-EOF.html_safe 
    <div class="box"> 
    EOF 

    yield if block_given? 
    concat <<-EOF.html_safe 
    </div> 
    EOF 
end 

Pero en los carriles 3 cuando la vista se vuelve emite toda mi una página d entonces dentro del box_wrapper representa todo el contenido de la página una segunda vez.

Creo que estoy perdiendo algo obvio con el uso de ayudantes y los rendimientos. ¿Algunas ideas?

Respuesta

31

En Rails 3, ya no es necesario utilizar el método concat para construir el contenido de sus bloques.

Su ayudante ahora se ve así:

def box_wrapper(&block) 
    content = capture(&block) 
    content_tag(:div, content, :class => 'box') 
end 

Puede ver otros ejemplos en Railscasts 208.

+1

acaba de enviar la recomendación de R. Bates: "ACTUALIZACIÓN: recomiendo el uso de la‘’método en lugar de‘captura with_output_buffer’.. Esto tiene el beneficio añadido de trabajar fuera de puntos de vista ERB código de abajo se ha actualizado." – apneadiving

+0

@apneadiving - Gracias por eso, definitivamente una mejora. –

+0

Gracias! Mi uso real es más complicado que un simple content_tag, pero eso fue suficiente para comenzar. – nimblegorilla

Cuestiones relacionadas