exist - Ruby array to Javascript array
js if array contain (4)
Tengo una matriz de Ruby con identificadores de cuenta.
Me gustaría almacenar la matriz Ruby de identificadores de cuenta en una matriz de Javascript.
Me preguntaba cuál es la mejor manera de hacer esto.
Además, cuando he estado tratando de hacer esto, parece que Javascript piensa que si solo se ingresó un ID de cuenta, ese debería ser el tamaño de la matriz. ¿Hay alguna forma de evitar esto? He intentado ponerlo entre comillas, pero eso no parece funcionar.
Aquí está el camino que funciona para mí. Digamos que tengo matriz en el controlador:
@my_array = [[''city'', ''number''], [''nyc'', 39], [''queens'', 98]]
Quiero usarlo en slim y generar un gráfico circular de Google, luego puedo obtener esa matriz de JavaScript en slim de la siguiente manera:
javascript:
var myJsArray = #{raw @my_array};
o puedo obtener esa matriz de JavaScript en erb como:
var myJsArray = <%=raw @my_array%>;
De alguna manera, funciona para mí.
Basado en la última solución propuesta por @Shadwell, prefiero algo como:
var myJSArray = new Array("#{@my_array.map(&:inspect).join(", ")}");
mi ejemplo no usa ERB, porque se usó en una función MapReduce para mongodb.
Si en tu control tienes:
@my_array = [1, 2, 3]
Puede configurar una variable de javascript como esta en su vista:
<script type="text/javascript">
var myJSArray = new Array(<%= @my_array.map(&:to_s).join(", ") %>);
</script>
o:
var myJSArray = [<%= @my_array.map(&:to_s).join(", ") %>];
Ambos casos cambian su matriz de ruby de valores de identificación numéricos en una matriz de cadenas y luego unen esos valores de cadena junto con comas para generar valores válidos para javascript.
Si quieres representaciones de cadenas en tu javascript, deberás agregar comillas dobles alrededor de los valores en tu matriz de ruby:
var myJSArray = [<%= @my_array.map { |some_id| ''"'' + some_id.to_s + ''"'' }.join(", ") %>];
Supongamos que está utilizando erb . Un primer acercamiento:
<%= javascript_tag "account_ids = #{account_ids.to_json.html_safe};" %>
El problema es que esto crea una variable global sin contexto (¿quién la usa?). Es por eso que prefiero llamar a una función definida en algún lugar de su código JS:
<%= javascript_tag "setAccounts(#{account_ids.to_json.html_safe});" %>