2010-11-17 6 views
66

Je suis en train de balises de contenu de nid dans une aide personnalisée, pour créer quelque chose comme ceci:Rails- content_tag imbriqué

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

Notez que l'entrée ne soit pas associée à une forme, il sera enregistré via javascript .

est ici l'aide (il fera plus de simplement afficher le code 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' %> 

Cependant, l'étiquette n'apparaît pas quand je l'appelle l'aide, seule l'entrée est affiché. Si elle commente text_field_tag, l'étiquette est affichée.

Merci!

Répondre

135

Vous avez besoin d'un + pour solution rapide: 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' %> 

A l'intérieur du bloc de content_tag :div, seule la dernière chaîne retournée sera affiché.

+1

Typo (en commentaire seulement, mais un peu confus) - "Non * e * le + dans cette ligne" – Chowlett

+0

Après avoir ajouté que, je reçois une erreur de syntaxe: erreur de syntaxe, tIDENTIFIER inattendue, attendant KDO ou '{' ou '(' \t \t nom de text_field_tag, '',: class => 'new_value moyen' \t \t^ – christo16

+0

J'ai mis à jour la réponse, voir si c'est OK. – PeterWong

42

Vous pouvez également utiliser la méthode 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 

Source: Nesting content_tag in Rails 3

+0

Cela a fonctionné pour moi tant que la ligne de concat était sur 1 ligne. Je n'ai pas passé beaucoup de temps à jouer avec, donc, il y a probablement un moyen de le faire en ligne multi-ligne – TerryS

+0

ce sera un meilleur moyen compte tenu du problème html_safe. utiliser '+ 'entre les chaînes non-htmlsafe rendra tout non-htmlsafe –

Questions connexes