Estoy tratando de anidar etiquetas de contenido en un asistente personalizado para crear algo como esto:
<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á asociada con un formulario, se guardará mediante javascript.
Aquí está el ayudante (hará más que solo mostrar 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, solo se muestra la entrada. Si comenta el text_field_tag, entonces se muestra la etiqueta.
¡Gracias!
ruby-on-rails
ruby-on-rails-3
helpers
christo16
fuente
fuente
concat
como sugieren las otras respuestasTambién puede usar el método concat :
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: anidado content_tag en Rails 3
fuente
+
entre cadenas no htmlsafe hará que todo no sea htmlsafe@template.concat
+
. Más legible y a Rubocop no le gusta+
Utilizo una variable y concat para ayudar con un anidamiento más profundo.
def billing_address customer state_line = content_tag :div do concat( content_tag(:span, customer.BillAddress_City) + ' ' + content_tag(:span, customer.BillAddress_State) + ' ' + content_tag(:span, customer.BillAddress_PostalCode) ) end content_tag :div do concat( content_tag(:div, customer.BillAddress_Addr1) + content_tag(:div, customer.BillAddress_Addr2) + content_tag(:div, customer.BillAddress_Addr3) + content_tag(:div, customer.BillAddress_Addr4) + content_tag(:div, state_line) + content_tag(:div, customer.BillAddress_Country) + content_tag(:div, customer.BillAddress_Note) ) end end
fuente
La creación de etiquetas de contenido anidado con iteración es un poco diferente y me atrae cada vez ... aquí hay un método:
content_tag :div do friends.pluck(:firstname).map do |first| concat( content_tag(:div, first, class: 'first') ) end end
fuente