Ruby on rails 来自rails控制台的YAML输出
在rails控制台中执行类似于Ruby on rails 来自rails控制台的YAML输出,ruby-on-rails,ruby,console,yaml,Ruby On Rails,Ruby,Console,Yaml,在rails控制台中执行类似于y Grau.all的命令时,我得到了这些奇怪的!二进制字符串,而不是属性名称。你知道怎么解决这个问题吗 谢谢 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
y Grau.all
的命令时,我得到了这些奇怪的!二进制
字符串,而不是属性名称。你知道怎么解决这个问题吗
谢谢
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
[更新]
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>
irb(main):001:0>Grau.find(1)
←[1m←[36mGrau负载(43.8ms)←[0m←[1选择“graus”。*从“graus”中选择“grau”
s.““id”=?限制1←[0m[[“id”,1]]
=> #
irb(主要):002:0>
我正在Windows 7 64位上使用Rails 3.2.3和Ruby 1.9.3。我不确定irb,但请尝试Rails应用程序根目录中的Rails控制台(它将正确加载所有activerecord对象) 在Rails 2.x中
ruby脚本/控制台
在Rails 3.x中
rails c
这似乎是因为rails默认使用较新的psych
YAML引擎,较旧的syck
YAML引擎不会输出!binary
键。如果您只是想在控制台中进行测试,可以切换回较旧的YAML引擎作为临时解决方案:
> 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
只有当ActiveRecord列名/属性键使用Encoding::ASCII_8BIT
编码时,才需要这样做,我认为这只会发生在SQLite上
更新: 发布此答案后,SQLite3 gem已被修复。请确保您使用的是SQLite3 gem的1.3.6版(或更高版本)。然后,默认/更新的psych yaml引擎(也支持人类可读的unicode输出)将正常工作:
> 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
在我的一个页面上显示我的调试(参数)时,我遇到了同样的问题。这让我非常沮丧。我可能花了很长的时间,但我一直在使用sqlite3,并且知道我将在生产中使用Postgres,于是我继续在本地配置Postgres数据库(有点痛苦)。 另一件可能已经完成的事情是在我添加的database.yml文件上 编码:unicode
如果您有时间和耐心,最好在测试中使用与生产中相同的数据库。您能给出一个仅一个
Grau
对象的示例吗?Grau.find(1)(或任何其他有效ID)控制台中的输出是什么?它也是二进制的吗?您使用的是什么版本的ruby和rails?根据要求更新了问题。请看一看。谢谢。谢谢您的回答。它很有效!是否可以运行该命令来自动更改yaml引擎或任何我可以更改的配置文件,这样我就不必每次手动执行此操作?谢谢。您只是想吗g它在rails控制台中?如果是这样,您可以将YAML::ENGINE.yamler='syck',如果定义的话?(rails::console)
在您的开发中.rb
就是这样。但是,现在,我得到的是一些特殊字符的unicode表示形式,比如irm\xC3\xA3o
,而不是irmão
。在我的葡萄牙语语言中,能够在控制台上看到这些字符非常重要。知道如何解决这个问题?谢谢。
> 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
> 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