2010-11-17 16 views
66

Sto cercando di tag contenuti nido in un aiuto personalizzato, per creare qualcosa di simile:Rails- content_tag nidificato

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

Si noti che l'ingresso non è associata ad un modulo, esso verrà salvato tramite JavaScript .

Ecco l'assistente (che farà più quindi solo visualizzare il codice 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' %> 

Tuttavia, l'etichetta non viene visualizzato quando chiamo l'aiutante, viene visualizzato solo l'ingresso. Se commenta il text_field_tag, viene visualizzata l'etichetta.

Grazie!

risposta

135

Hai bisogno di un + alla 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, solo l'ultima stringa restituita verrebbe visualizzato.

+1

Typo (in commento solo, ma un po 'confusa) - "Non * e * il + in questa linea" – Chowlett

+0

Dopo aver aggiunto che, ottengo errore di sintassi: errore di sintassi, tIDENTIFIER inaspettato, aspettandosi kDO o '{' o \t \t nome text_field_tag ​​'(', '',: class => 'new_value medium' \t \t^ – christo16

+0

Ho aggiornato la risposta, vedere se questo va bene. – PeterWong

42

È inoltre possibile utilizzare 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: Nesting content_tag in Rails 3

+0

Questo ha funzionato per me fintanto che la linea concat era su 1 linea. Non ho speso molto tempo per giocarci, quindi c'è probabilmente un modo per farlo su più linee – TerryS

+0

questo sarà un modo migliore considerando il problema html_safe. usare '+' tra una stringa non-htmlsafe renderà tutto non-html sicuro –