Rails-вложенный тег содержимого
Я пытаюсь вложить теги контента в пользовательский помощник, чтобы создать что-то вроде этого:
<div class="field">
<label>A Label</label>
<input class="medium new_value" size="20" type="text" name="value_name" />
</div>
обратите внимание, что вход не связан с формой, он будет сохранен с помощью javascript.
вот помощник (он будет делать больше, чем просто отображать 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' %>
однако метка не отображается, когда я вызываю помощника, отображается только вход. Если он закомментирует text_field_tag, то метка будет отображается.
спасибо!
4 ответа:
вам понадобится
+
для быстрого исправления :Dmodule 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' %>
внутри блока
content_tag :div
, будет отображаться только последняя возвращенная строка.
вы также можете использовать функция 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
источник: вложенность content_tag в Rails 3
Я использую переменную и concat, чтобы помочь с более глубокой вложенности.
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