2010-12-10 37 views
5

Estoy intentando utilizar un ayudante select_tag en Rails 3. Empecé con un ejemplo muy básico, copiado recta from the documentation:Rails 3 select_tag no producir elementos DOM

Parece para producir el marcado correcto, pero el selecto no funciona - al hacer clic no hace nada.

Para la comparación, he creado la misma selección en HAML. Eso funciona bien. Este es el código para ambos:

-# 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 

El select_tag parece producir las opciones en una cadena, pero no como elementos DOM - en Firebug, que son sólo grises, sin relieve sintaxis como los elementos DOM en el trabajo seleccionado producido por HAML.

¿Cuál es el problema?

Respuesta

5

Descubrí la respuesta justo antes de publicar la pregunta: la cadena necesita tener .html_safe llamado.

fuente de visionado muestra que los carriles se ha convertido todo el < y > en &lt; y &gt;, porque ahora se escape cadenas de caracteres por defecto. html_safe dice "no, realmente, confía en mí, este está bien para mostrar como HTML".

así que esto hace que funcione:

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

Sería bonito si se ha actualizado la documentación, pero bueno, al menos, la respuesta es rápida búsqueda aquí ahora. :)

+0

woo nunca lo supo. gracias hombre – corroded

+0

Otro consejo: asegúrese de que la cadena * completa * que está pasando para las opciones es .html_safe - por ejemplo, si está llamando a 'string1 + some_array.map {}. join(). html_safe', ganó No funciona porque solo se llama a .html_safe en la última expresión. Colóquelo en parens, o use 'raw()' alrededor de todo el conjunto en su lugar (equivalente). – trisweb