Soy nuevo en Ruby/Rails y me dieron la tarea de hacer que un sitio de Ruby (.html.erb) se vea un poco mejor. Una de las cosas solicitadas fue presentar información en el sitio, que actualmente se muestra como JSON, como un html atractivo. La línea de html.erb es la siguiente:
<%= @buyer.generate_profile.inspect %><br>
y mostrará la información que recibe en el sitio como JSON. ¿Qué puedo hacer para analizar el JSON y hacer que el sitio muestre la información como html adecuado?
Es posible que desee consultar JSON.pretty_generate . Podría mostrar el resultado en un bloque de code como:
<%# If your data is a JSON string, convert it to a hash %> <% hash = JSON.parse(@buyer.generate_profile) %> <pre> <code> <%= JSON.pretty_generate(hash) %> </code> </pre>Entonces, el método generate_profile devuelve un objeto Hash y llamar a inspect creará una salida de cadena de la sintaxis Hash en Ruby, por lo que el resultado se parece a su comentario.
Si quisiera que se pareciera a JSON, la forma más sencilla sería usar el método to_json de esta manera
<%= @buyer.generate_profile.to_json %>pero honestamente, no es mucho mejor. E incluso si tuviera que buscar métodos que puedan presentarlo con saltos de línea adecuados, etc., eso tampoco lo mejoraría mucho.
Le recomendaría que aprenda a iterar sobre las claves y los valores en un Hash, porque eso le permitiría crear un diseño HTML personalizado que podría verse como usted quisiera.
Como ejemplo, le mostraré cómo podría crear una tabla simple basada en los datos de su comentario.
<table> <thead> <tr> <th>Key</th> <th>XX</th> <th>YY</th> <th>ZZ</th> </tr> </thead> <tbody> <% @buyer.generate_profile.each_pair do |key, sub_hash| %> <tr> <td><%= key %></td> <td><%= sub_hash[:xx] %></td> <td><%= sub_hash[:yy] %></td> <td><%= sub_hash[:zz] %></td> </tr> <% end %> </tbody> </table> Lo principal aquí es el uso de each_pair que es un método que itera sobre cada clave y valor del hash. En su caso, parece que los valores del primer hash son sub-hashes, de ahí mi uso de sub_hash como argumento de bloque.
Técnicamente, también podría usar each_pair en los sub-hashes, pero supongo que todos tienen las mismas claves, por eso agregué manualmente columnas y celdas para XX, YY, ZZ en combinación con sub_hash[:xx] , etc.
Una vez que aprenda cómo funciona la iteración sobre hashes y arreglos, recomendaría descartar el diseño de la tabla y, en su lugar, buscar enfoques de diseño web más modernos como Flex y CSS-Grid, pero una cosa a la vez :)