Entonces, al ser nuevo en los rieles, parece que estoy atascado en la creación de un bucle dentro de un bucle para procesar la información.

Estoy recibiendo:

no se puede convertir el símbolo en la línea entera # 11

La línea en cuestión es:

Host <%= servicedetails[:hostidn] %> - <%= servicedetails[:status] %>

Y aquí está la versión completa a continuación. Siendo nuevo, no tengo ni idea y estoy abierto a sugerencias.

<div>
<% @service_hash[:service_list].each do |servicesinfo| %>
        <ul>
        <li>
            <ul>
                <li>
                    <h2><%= servicesinfo[:service_name] %><h2>
                </li>
                <% servicesinfo.each do |servicedetails| %>
                <li>
                    Host <%= servicedetails[:hostidn] %> - <%= servicedetails[:status] %>
                </li>
                <% end %>
            </ul>

        </li>
        </ul>
    <% end %>
</div>

El equivalente JSON de este hash es

{"status":"successful","service_list":[{"service_name":"oozie","status":"RUNNING","status_message":"Running Master Service","host":"1"},{"service_name":"single-namenode","status":"RUNNING","status_message":"Running Service","host":"1"},{"service_name":"single-database","status":"RUNNING","status_message":"Running Service","host":"1"},{"service_name":"datanode","status":"RUNNING","status_message":"Running Service","host":"1"},{"service_name":"secondarynamenode","status":"RUNNING","status_message":"Running Service","host":"1"},{"service_name":"web","status":"DEAD","status_message":"Running Master Service","host":"1"},{"service_name":"tasktracker","status":"RUNNING","status_message":"Running Service","host":"1"},{"service_name":"jobtracker","status":"RUNNING","status_message":"Running Master Service","host":"1"}]}
0
chris 9 dic. 2011 a las 01:48

1 respuesta

La mejor respuesta

Ya está iterando sobre la matriz de hashes con información de servicio (renombrada para que tenga sentido):

<% @service_hash[:service_list].each do |service_info| %>
  ...
<% end %>

Iterar sobre service_info devolvería [key, value] pares, probablemente no lo que desea.

Acceda a la información de service_info directamente, como ya lo hace con :name

<%= service_info[:host] %> - <%= service_info[:status] %>

No veo nada llamado :hostidn en ese hash, solo :host; No estoy seguro de si se trata de un error tipográfico o si espera que no se muestren datos adicionales.

2
Dave Newton 9 dic. 2011 a las 01:57
El hash que se muestra era la representación.Desde entonces he cambiado la salida para reflejar hostidn por otras razones, aunque no lo noté al publicar aquí
 – 
chris
9 dic. 2011 a las 02:06
La nota al margen todavía necesita iterar sobre cada conjunto de forma independiente. Esta lista es solo una versión pequeña. Necesito construir cada contenedor respectivamente con datos coincidentes para cada contenedor. En este momento, este soy yo tratando de resolverlo y descubrir cómo trabajar con él.
 – 
chris
9 dic. 2011 a las 02:14
Eso está bien, siempre que sepa lo que realmente está obteniendo. En mi opinión, es más típico iterar usando .each { |key, value| } u obtener las claves en el orden que desee y recuperar los valores del mapa, pero tal vez esto funcione para usted. En cualquier caso, en la versión que muestra, obtendrá una matriz, no un hash, por lo que obtiene el error: espera un índice de matriz, no un símbolo.
 – 
Dave Newton
9 dic. 2011 a las 02:17
Puedo trabajar con eso. Creo que sería más feliz si pudiera hacer que funcione como una matriz. Porque la salida visualmente es algo que al final va a ser manipulado en gran medida por jquery, solo conseguir que la salida se parezca a lo que quiero inicialmente parece ser la parte difícil para mí.
 – 
chris
9 dic. 2011 a las 02:36
¿Hay alguna manera de tomar el hash en la carga de la vista y convertirlo estrictamente en una matriz? De ser así, ¿cómo trabajaría con la matriz correctamente?
 – 
chris
9 dic. 2011 a las 02:36