YAML output from rails console
console, ruby, ruby-on-rails, yaml
Solution
It appears to be because rails defaults to using the newer `psych` YAML engine, the older `syck` yaml engine doesn't output the `!binary` keys. If you're just wanting it for testing in the console you can switch back to the older yaml engine as a temp workaround:
> y User.first
User Load (0.0ms) SELECT "users".* FROM "users" LIMIT 1
--- !ruby/object:User
attributes:
!binary "aWQ=": 1
!binary "bmFtZQ==": Example User
!binary "ZW1haWw=": user@example.com
> YAML::ENGINE.yamler= 'syck'
=> "syck"
> y User.first
User Load (1.0ms) SELECT "users".* FROM "users" LIMIT 1
--- !ruby/object:User
attributes:
id: 1
name: Example User
email: user@example.com
You would only need to do this when your ActiveRecord column names/attributes keys are encoded using `Encoding::ASCII_8BIT` which 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:
> y User.first
User Load (0.0ms) SELECT "users".* FROM "users" LIMIT 1
EXPLAIN (0.0ms) EXPLAIN QUERY PLAN SELECT "users".* FROM "users" LIMIT 1
EXPLAIN for: SELECT "users".* FROM "users" LIMIT 1
0|0|0|SCAN TABLE users (~1000000 rows)
--- !ruby/object:User
attributes:
id: 1
name: irmão
email: user@example.com
Problem
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.