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 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=": [email protected]
> 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: [email protected]
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.
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: [email protected]
I was encountering the same issue with displaying my debug(params) on one of my pages. It was frustrating me to no end. I probably took the long way around, but I had been using sqlite3, and knowing that I was going to use Postgres in production, I went ahead and configured the Postgres database locally (Kind of a pain in the butt). The other thing that might have done it was on the database.yml file I added encoding: unicode.
If you have the time and the patience it's probably best to use same database in test as you will use in production.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With