2010-11-17 10 views
66

Estoy tratando de etiquetas de contenido nido en un ayudante de costumbre, para crear algo como esto:Rails- content_tag anidada

<div class="field"> 
    <label>A Label</label> 
    <input class="medium new_value" size="20" type="text" name="value_name" /> 
</div> 

Tenga en cuenta que la entrada no está asociado a un formulario, que se guardará a través de JavaScript .

Aquí es el ayudante (que va a hacer más que sólo visualizar el HTML):

module InputHelper 
    def editable_input(label,name) 
     content_tag :div, :class => "field" do 
      content_tag :label,label 
      text_field_tag name,'', :class => 'medium new_value' 
     end 
    end 
end 

<%= editable_input 'Year Founded', 'companyStartDate' %> 

Sin embargo, la etiqueta no se muestra cuando llamo al ayudante, sólo se muestra la entrada. Si comenta el text_field_tag, entonces se muestra la etiqueta.

Gracias!

Respuesta

135

Se necesita un + a una solución rápida: D

module InputHelper 
    def editable_input(label,name) 
    content_tag :div, :class => "field" do 
     content_tag(:label,label) + # Note the + in this line 
     text_field_tag(name,'', :class => 'medium new_value') 
    end 
    end 
end 

<%= editable_input 'Year Founded', 'companyStartDate' %> 

Dentro del bloque de content_tag :div, se mostraría solamente la última cadena devuelta.

+1

Typos (en algún comentario, pero un poco confuso) - "No * e * el signo + en esta línea" – Chowlett

+0

Después de añadir que, me sale error de sintaxis: error de sintaxis, tIDENTIFIER inesperado, Kdo o esperando '{' o '(' \t \t nombre text_field_tag, '',: class => 'nuevo_valor medio' \t \t^ – christo16

+0

Actualicé la respuesta, ve si esto está bien. – PeterWong

42

También puede utilizar el concat método:

module InputHelper 
    def editable_input(label,name) 
    content_tag :div, :class => "field" do 
     concat(content_tag(:label,label)) 
     concat(text_field_tag(name,'', :class => 'medium new_value')) 
    end 
    end 
end 

Fuente: Nesting content_tag in Rails 3

+0

Esto funcionó para mí siempre que la línea de concat estuviera en 1 línea. No pasé mucho tiempo jugando con él, así que probablemente haya una manera de hacerlo con múltiples líneas – TerryS

+0

, esta será una mejor manera considerando el problema html_safe. usar '+' entre cadenas que no sean htmlsafe hará que todo no sea htmlsafe –