When executing a command like y Grau.all in rails console I am getting these strange !binary strings instead of the attribute’s name. Any idea how to fix this?
Thanks.
irb(main):003:0> y Grau.all
←[1m←[36mGrau Load (0.0ms)←[0m ←[1mSELECT "graus".* FROM "gr
←[1m←[35mEXPLAIN (0.0ms)←[0m EXPLAIN QUERY PLAN SELECT "grau
EXPLAIN for: SELECT "graus".* FROM "graus"
0|0|0|SCAN TABLE graus (~1000000 rows)
---
- !ruby/object:Grau
attributes:
!binary "aWQ=": 27
!binary "bm9tZQ==": 1 Grau
!binary "Y3JlYXRlZF9hdA==": 2012-04-06 21:24:34.553163000 Z
!binary "dXBkYXRlZF9hdA==": 2012-04-06 21:24:34.553163000 Z
- !ruby/object:Grau
attributes:
!binary "aWQ=": 28
!binary "bm9tZQ==": 2 Grau
!binary "Y3JlYXRlZF9hdA==": 2012-04-06 21:24:34.599963000 Z
!binary "dXBkYXRlZF9hdA==": 2012-04-06 21:24:34.599963000 Z
[UPDATES]
irb(main):001:0> Grau.find(1)
←[1m←[36mGrau Load (43.8ms)←[0m ←[1mSELECT "graus".* FROM "graus" WHERE "grau
s"."id" = ? LIMIT 1←[0m [["id", 1]]
=> #<Grau id: 1, nome: "1º Grau", created_at: "2012-04-11 15:51:32", updated_at:
"2012-04-11 15:51:32">
irb(main):002:0>
I am using Rails 3.2.3, Ruby 1.9.3 on a Windows 7 64 bit.
It appears to be because rails defaults to using the newer
psychYAML engine, the oldersyckyaml engine doesn’t output the!binarykeys. If you’re just wanting it for testing in the console you can switch back to the older yaml engine as a temp workaround:You would only need to do this when your ActiveRecord column names/attributes keys are encoded using
Encoding::ASCII_8BITwhich I think only happens with SQLite.Update:
Since posting this answer the SQLite3 gem has been fixed to return utf8 for column names. Make sure you’re using version 1.3.6 (or higher) of the sqlite3 gem. Then the default/newer psych yaml engine (which also supports human-readable unicode output) will work without problems: