Contenuto_tag di noccioli

Sto cercando di nidificare i tag di contenuto in un helper personalizzato, per creare qualcosa del genere:

Si noti che l’input non è associato a un modulo, verrà salvato tramite javascript.

Ecco l’helper (farà di più quindi mostrerà solo l’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  

Tuttavia, l’etichetta non viene visualizzata quando chiamo l’helper, viene visualizzato solo l’input. Se commenta il text_field_tag, viene visualizzata l’etichetta.

Grazie!

Hai bisogno di un + per una soluzione rapida: 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' %> 

All’interno del blocco di content_tag :div , verrà visualizzata solo l’ultima stringa restituita.

Puoi anche usare il metodo 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 

Fonte: annidamento content_tag in Rails 3

Io uso una variabile e concat per aiutare con il nesting più profondo.

 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