2012-03-09 16 views
6

He buscado en Internet lo mejor que puedo para este problema, pero estoy completamente identificado con la palabra clave! Binary como motores de búsqueda (¡incluida la búsqueda interna de stackoverflow!), Quito el signo de exclamación.Rails debug method only outputs! Binary values ​​

Estoy trabajando a través del Rails tuorial en http://ruby.railstutorial.org, que en su mayor parte ha sido un recurso excelente. Una de las cosas útiles que tengo en la parte inferior de mi página application.html.erb es:

<%= dump(params) %> 

Me han dicho que un escenario particular debe emitir el siguiente:

--- !map:ActiveSupport::HashWithIndifferentAccess 
commit: Sign in 
session: !ActiveSupport::HashWithIndifferentAccess 
    password: "" 
    email: "" 
authenticity_token: BlO65PA1oS5vqrv591dt9B22HGSWW0HbBtoHKbBKYDQ= 
action: create 
controller: sessions 

En vez consigo lo siguiente:

--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess 
!binary "dXRmOA==": ✓ 
!binary "YXV0aGVudGljaXR5X3Rva2Vu": ItPS/PZ+avYOGD2ckict1urJpatw1HinrVyk385/Yt8= 
!binary "c2Vzc2lvbg==": !ruby/hash:ActiveSupport::HashWithIndifferentAccess 
    !binary "dXNlcm5hbWU=": '' 
    !binary "cGFzc3dvcmQ=": '' 
!binary "Y29tbWl0": Sign in 
action: create 
controller: sessions 

Lo cual es mucho menos útil.

Supongo que los rieles tienen la opción de generar datos tal como están en la memoria (es decir, en forma binaria) o pueden decodificar los datos y mostrarlos en texto sin formato.

Obviamente estoy obteniendo los datos correctos, solo en el formulario equivocado.

La pregunta es ¿cómo obtengo la versión de texto plano?

La segunda pregunta es ¿por qué un sitio como stackoverflow no tiene un mecanismo para incluir caracteres especiales en las búsquedas? Fallo fundamental IMO

+0

Además, llamar a los objetos debug() que no sean params parece funcionar bien. –

+0

mu: ya me lo han preguntado allí varias veces: me he sentido como si me dolieran, ya que parece que nadie está realmente interesado en una solución –

+0

Parece que solo las claves están codificadas si eso ayuda. –

Respuesta

1

Creo que esa es la codificación de cadena para la clave que se representa extrañamente como !binary aunque no haya caracteres ASCII que no sean de 7 bits. Los valores se codifican como base 64 para hacerlos en texto plano:

"dXRmOA==".unpack('m') 
# => ["utf8"] 

Esto podría ser un artefacto de su entorno, donde la cadena de codificación por defecto es irregular.

+0

Mi archivo application.rb tiene: config.encoding = "utf-8" No debe haber caracteres no-utf-8 en ninguna parte del sistema. incluso si lo que dices es intentar, esto no me ayuda a obtener los datos reales en forma de texto claro. –

4

¿Puedes intentar cambiar de .dump a .inspect como este?

<%= params.inspect %> 
+0

Eso es mucho mejor, todavía me gustaría saber por qué las claves en .dump están codificadas en base64. –

+0

Solo una nota sobre la recompensa: esperaré unos días más para que alguien responda la pregunta de por qué se codifica .dump y cómo solucionarlo, pero si no recibo respuesta la adjudicaré a esta respuesta que está en: menos útil. –

+0

Bien hecho - usted mismo se anotó mi primer botín :) –

0

Esto es definitivamente demasiado tarde para ayudarle, pero es de esperar que otros que están llegando a esta pregunta mientras se trabaja a través de Rieles tutoriales de Michael Hartl puede encontrar útil.

La segunda edición de Rails Tutorials usa la gema sqlite3 1.3.5.

Esta respuesta explica las diferencias de cómo la materia analiza a cabo ... YAML output from rails console

Funcionó para mí - He actualizado la gema sqlite3 a 1.3.6 en mi Gemfile, corrió y mató bundle install/reiniciar los raíles servidor. Después de eso, el binario se vuelve a cambiar a las teclas de texto que cabría esperar.