Próbuję zagnieździć tagi treści w niestandardowym pomocniku, aby utworzyć coś takiego:
<div class="field">
<label>A Label</label>
<input class="medium new_value" size="20" type="text" name="value_name" />
</div>
Zauważ, że dane wejściowe nie są powiązane z formularzem, zostaną zapisane za pomocą javascript.
Oto pomocnik (zrobi więcej niż po prostu wyświetli 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' %>
Jednak etykieta nie jest wyświetlana, gdy dzwonię do pomocnika, wyświetlane jest tylko wejście. Jeśli wykomentuje text_field_tag, zostanie wyświetlona etykieta.
Dzięki!
ruby-on-rails
ruby-on-rails-3
helpers
christo16
źródło
źródło
concat
tak, jak sugerują inne odpowiedziMożesz także użyć metody 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
Źródło: Zagnieżdżanie content_tag w Railsach 3
źródło
+
między non-htmlsafe ciąg uczyni wszystko non-htmlsafe@template.concat
+
. Bardziej czytelny, a Rubocop nie lubi+
Używam zmiennej i concat, aby pomóc w głębszym zagnieżdżaniu.
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
źródło
budowanie zagnieżdżonych tagów treści za pomocą iteracji jest trochę inne i dostaje mnie za każdym razem ... oto jedna metoda:
content_tag :div do friends.pluck(:firstname).map do |first| concat( content_tag(:div, first, class: 'first') ) end end
źródło