2010-12-10 44 views
5

J'essaie d'utiliser une aide select_tag dans Rails 3. J'ai commencé par un exemple très basique, copié directement from the documentation:Rails 3 select_tag ne produisant pas des éléments DOM

Il semble produire le balisage correct, mais la sélection ne fonctionne pas - cliquer dessus ne fait rien.

Pour comparaison, j'ai créé le même select en HAML. Cela fonctionne bien. Voici le code pour les deux:

-# The select_tag version 
= select_tag "count", "<option>1</option><option>2</option><option>3</option><option>4</option>" 

-# The HAML version 
%select{:name => "count", :id => "count"} 
    %option 1 
    %option 2 
    %option 3 
    %option 4 

Le select_tag semble produire les options dans une chaîne, mais pas comme des éléments DOM - dans Firebug, ils sont tout simplement gris, pas la syntaxe surligné comme les éléments DOM dans la travail sélectionné produit par HAML.

Quelle est la situation?

Répondre

5

J'ai trouvé la réponse juste avant de poster la question: la chaîne doit avoir .html_safe appelé.

la source Affichage montre que Rails a tourné tout parce qu'il est maintenant échapper à des chaînes par défaut < et > dans &lt; et &gt;,. html_safe dit "non vraiment, croyez-moi, celui-ci est OK pour afficher en HTML."

Cela fait donc fonctionner:

= select_tag "count", "<option>1</option><option>2</option><option>3</option><option>4</option>".html_safe 

Ce serait bien s'ils mis à jour la documentation, mais bon, au moins la réponse est facilement consultable ici maintenant. :)

+0

woo n'a jamais su cela. thanks man – corroded

+0

Un autre conseil: assurez-vous que la chaîne * whole * que vous passez pour les options est .html_safe - par exemple, si vous appelez 'string1 + some_array.map {}. join(). html_safe', il a gagné ne fonctionne pas car .html_safe est seulement appelé sur la dernière expression. Placez-le dans les parens, ou utilisez 'raw()' autour du tout (équivalent). – trisweb